nginx 添加跨域响应头
时间: 2025-01-03 17:34:32 浏览: 9
### 配置Nginx中的CORS响应头
为了使Nginx支持跨源资源共享(CORS),可以在HTTP配置部分添加特定的头部信息来控制哪些资源可以被访问以及如何访问这些资源。
对于全局应用,可在`http`上下文中设置默认行为:
```nginx
http {
...
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
```
针对具体位置或服务器块,则应在相应的`server`或`location`指令内定义更精确的规则[^1]。
当需要允许来自特定域名而非所有站点的请求时,应替换通配符(*)为实际的目标URL:
```nginx
add_header 'Access-Control-Allow-Origin' 'https://example.com';
```
如果应用程序依赖于凭证(如Cookies),则需额外指定如下参数并确保`Access-Control-Allow-Origin`不使用通配符:
```nginx
add_header 'Access-Control-Allow-Credentials' 'true';
```
处理预检(Preflight)请求(`OPTIONS`)也是必要的,特别是当涉及到非简单请求(non-simple requests):
```nginx
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
```
此段代码会拦截所有的`OPTIONS`请求,并返回适当的状态码和头部信息给客户端浏览器,从而避免了不必要的错误发生[^2].
阅读全文