【问题标题】:Nginx: Difference between CORS restrictions and specific server blocksNginx:CORS 限制和特定服务器块之间的区别
【发布时间】:2017-03-09 20:29:49
【问题描述】:

我不太明白指定特定服务器块 (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 cors reverse-proxy


    【解决方案1】:

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

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

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

    因此,如果您想让客户端 Web 浏览器“限制 api 调用”,那么 (2) 是您最好的选择,而如果您只是希望特定域的 api 调用使用特定代码,那么 (1) 是您的最佳选择赌注。如果像我一样,您希望在服务器端实施 CORS 限制,那么您的两个选项都不能实现这一点,您必须实施不同的解决方案(但如果用于确定是否或如何提供响应而不是向浏览器发送 CORS 标头)。 HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 2011-07-08
      • 2012-12-11
      • 2020-09-18
      • 2011-02-23
      • 1970-01-01
      • 2010-10-27
      相关资源
      最近更新 更多