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