nginx - 如何根据请求中的 Origin header 正确将 nginx Access-Control-Allow-Origin 设置到响应 header 中?

标签 nginx cors

我正在寻找一个 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。

Use map instead

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;
    }
    ...
 }

If is evil

关于nginx - 如何根据请求中的 Origin header 正确将 nginx Access-Control-Allow-Origin 设置到响应 header 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499320/

相关文章:

nginx - 如何使 UNIX 套接字更快?

java - 即使在@CrossOrigin注释之后,Spring Boot CORS也不起作用

nginx - 如何从 NGINX RTMP 模块向 Janus 发送 RTP 流?

javascript - 第一个响应中缺少 Access-Control-Allow-Origin

java - 如何从 angularjs 和 CORS 支持将文件上传到 Jersey

canvas - 如何调试 CORS 错误

Azure 存储 CORS 配置

ruby-on-rails - 如何在Rails下的Webrick中设置access-control-allow-origin?

xml - 更改 nginx autoindex 输出格式

php - 在 ISPConfig3 上运行 Symfony2