Nginx:CORS 限制和特定服务器块之间的区别

Nginx: Difference between CORS restrictions and specific server blocks

我不太明白指定特定服务器块 (1) 与对 CORS 设置限制 (2) 之间的区别。

即如果我只想将 API 调用限制为 domain1.com 和 domain2.com,我应该选择其中的哪一个?

(1)

http {
  index index.html;

  server {
    server_name www.domain1.com;
    access_log logs/domain1.access.log main;

    root /var/www/domain1.com/htdocs;
  }
  server {
    server_name www.domain2.com;
    access_log logs/domain2.access.log main;

    root /var/www/domain2.com/htdocs;
  }
}

(2)

set $cors '';
if ($http_origin ~ '^https?://(localhost|www\.domain1\.com|www\.domain2\.com)') {
        set $cors 'true';
}

if ($cors = 'true') {
        add_header 'Access-Control-Allow-Origin' "$http_origin" always;
...

我是 nginx 的初学者,但是,我想我可以回答你的问题:这取决于你想做什么。

(1) 服务器块确定 if/how Web 服务器根据请求的域处理请求。例如。如果客户端请求 domain1.com 那么服务器将提供 domain1.com 资源;如果客户端请求 domain2.com 那么服务器将提供 domain2.com 资源;等等

(2) 如您所示,CORS 代码确定服务器是否在响应中向浏览器发送 CORS ('Access-Control-Allow-Origin') header(即 header 告诉浏览器它是否应该只从同一个域发送客户端请求)。这些是客户端浏览器实施 CORS 请求限制的说明(以我的理解)——它们不是 server-side 实施的 CORS 限制。

因此,如果您想要客户端 Web 浏览器 "restrict api calls",那么 (2) 是您最好的选择,而如果您只想 api 调用特定域以使用特定代码,那么(1) 是您最好的选择。如果像我一样,您正在寻求在服务器端实施 CORS 限制,那么您的两个选项都无法实现,您必须实施不同的解决方案(但如果用于确定是否或,您提供的 (2) 可能非常有帮助)如何提供响应而不是向浏览器发送 CORS header)。 HTH.