我正在寻找一个 nginx 配置设置,它将 Access-Control-Allow-Origin
设置为 Origin
中收到的值。
似乎 *
方法不适用于 Chrome,并且多个 URL 不适用于 Firefox,因为 CORS 规范不允许这样做。
到目前为止,唯一的解决方案是将 Access-Control-Allow-Origin
设置为在源中收到的值(是的,可以实现一些验证)。
问题是如何在 nginx 中执行此操作,最好不安装额外的扩展。
set $allow_origin "https://example.com"
# instead I want to get the value from Origin request header
add_header 'Access-Control-Allow-Origin' $allow_origin;
最佳答案
使用 if
有时会破坏其他配置,例如 try_files
。您可能会遇到意想不到的 404。
map $http_origin $cors_header {
default "";
"~^https?://[^/]+\.example\.com(:[0-9]+)?$" "$http_origin";
}
server {
...
location / {
add_header Access-Control-Allow-Origin $cors_header;
try_files $uri $uri/ /index.php;
}
...
}
关于nginx - 如何根据请求中的 Origin header 正确将 nginx Access-Control-Allow-Origin 设置到响应 header 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499320/