Nginx 反向代理跨域问题解决
单域名
前端网站地址:http://xxxx.vip
服务端代理网址:http://api.xxxx.vip
服务端地址:localhost:8085
server { listen 80; server_name api.xxxx.vip; location / { if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://xxxx.vip'; add_header Access-Control-Allow-Headers 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With'; add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS'; add_header Access-Control-Allow-Credentials 'true'; # 允许客户端Js读到Content-Disposition 用于文件下载读取文件名 add_header Access-Control-Expose-Headers 'Content-Disposition'; return 204; } if ($request_method != 'OPTIONS') { add_header Access-Control-Allow-Origin 'http://xxxx.vip' always; add_header Access-Control-Allow-Credentials 'true'; } proxy_pass http://localhost:8085; } }
或者
server {
listen 80;
server_name api.xxxx.vip;
location / {
add_header Access-Control-Allow-Origin 'http://xxxx.vip' always;
add_header Access-Control-Allow-Headers 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With';
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
add_header Access-Control-Allow-Credentials 'true';
# 允许客户端Js读到Content-Disposition 用于文件下载读取文件名
add_header Access-Control-Expose-Headers 'Content-Disposition';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://localhost:8085;
}
}
指定多个域名跨域配置
前端网站地址:http://xxxx.vip http://xxxx.cc
服务端代理网址:http://api.xxxx.vip
服务端地址:localhost:8085
map $http_origin $allow_origin {
default "";
"~^(https?://localhost(:[0-9]+)?)" $1;
"~^(https?://127.0.0.1(:[0-9]+)?)" $1;
#"~^https://xxxx.vip" https://xxxx.vip;
#"~^https://m.xxxx.vip" https://m.xxxx.vip;
#"~^(https?://[\w]+.xxxx.vip)" $1;
"~^(https?://([\w]+.)?[\w]+.xxxx.cc)" $1;
"~^(https?://([\w]+.)?[\w]+.xxxx.vip)" $1; #允许一级和二级域名
}
server {
listen 80;
server_name api.xxxx.vip;
location / {
add_header Access-Control-Allow-Origin $allow_origin;
add_header Access-Control-Allow-Headers 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With';
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
add_header Access-Control-Allow-Credentials 'true';
# 允许客户端Js读到Content-Disposition 用于文件下载读取文件名
add_header Access-Control-Expose-Headers 'Content-Disposition';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://localhost:8085;
}
}

浙公网安备 33010602011771号