如果網站 的地址 在 https://www.domain.xyz 上, 這個網站后端服務在 http:api.domain.xyz, 這樣如果在 https:// www.domain.xyz 上
直接發送請求 到 http:api.domain.xyz 會出現跨域問題,因為雖然頂級域名相同,但是二級域名不同也會出現跨域(二級域名一個時 www,一個是 api)。
可采用如下 nginx 配置解決跨域問題:
nginx.conf 配置
nginx.conf
...
http {
...
server {
listen 443 ssl;
server_name api.domain.xyz;
# 配置 https
#證書文件名稱
ssl_certificate xxx.crt;
#私鑰文件名稱
ssl_certificate_key xxx.key;
# access_log logs/api.domain.access.log;
# 解決跨域問題
set $flag '0';
location / {
# 將 api.domain.xyz 域名上的請求代理到 http://127.0.0.1:3000
proxy_pass http://127.0.0.1:3000;
# 配置 domain.xyx 域名下的 所有 二級或多級域名 允許跨域請求
if ($http_origin ~* "(https?:\/\/.*\.domain\.xyz($|\/))") {
set $flag '1';
}
# 如果有 允許其它域名 進行跨域請求
# if ($http_origin ~* "(https?:\/\/.*\.otherdomain\.xyz($|\/))") {
# set $flag '1';
# }
if ($flag = '1') {
# 添加允許跨域的響應頭
# add_header Access-Control-Allow-Origin "*";
add_header Access-Control-Allow-Origin "$http_origin";
###帶上用戶認證信息
add_header Access-Control-Allow-Credentials true;
##允許的方法 post,get ...
add_header Access-Control-Allow-Methods "POST, GET, PUT, PATCH, DELETE";
# add_header Access-Control-Allow-Headers "xxx-xx-xx";
}
}
}
...
}