nginx配置跨域请求可携带cookie
当响应头Access-Control-Allow-Credentials
为true
时,跨域请求可携带cookie,但出于安全策略,Access-Control-Allow-Credentials
为true
时Access-Control-Allow-Origin
不能设置为 *
,
将Access-Control-Allow-Origin
的值设置为指定的域名有时候很不方便我们开发,可将值设置为$http_origin
,即可解决问题。
具体配置如下:
server {
listen 80;
server_name test.xxx.com;
charset utf-8;
add_header "Access-Control-Allow-Origin" $http_origin always;
add_header 'Access-Control-Allow-Credentials' true always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Cookie,DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Max-Age' 0;
#add_header 'Cache-Control' no-cache;
#add_header 'Content-Type' 'text/plain; charset=utf-8';
#add_header 'Content-Length' 0;
if ($request_method = 'OPTIONS') {
return 204;
}
location ^~ /static/ {
charset utf-8,gbk;
proxy_pass http://ebooking.xxx.com_80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
#do something
}
....
}
注解:
1.其中 always
是表示 任何情况 都返回,否则只会在200状态码返回。
2.这里把add_header写在了server层,是因为该项目的nginx配置 location比较多,因为每一层都可以从上层继承 add_header,所以直接写在server层,所有的location都可以继承,注意:如果当前层添加了add_header,则不能继承。
层级关系:
http 模块
server 模块
location 模块
location中的 if 模块
这样配置后,所有的域都可请求,如需限制为指定的 域才可请求,可以这样改:
location / {
set $cors_origin "";
if ($http_origin ~* "^http://test.xxx.com$") {
set $cors_origin $http_origin;
}
if ($http_origin ~* "^https://test2.xxx.com$") {
set $cors_origin $http_origin;
}
add_header Access-Control-Allow-Origin $cors_origin;
版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/2523/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论