1. 程式人生 > 其它 >Nginx 配置 https 和 配置 允許指定域名下所有二級域名跨域請求

Nginx 配置 https 和 配置 允許指定域名下所有二級域名跨域請求

Nginx 配置 https 和 配置 允許指定域名下所有二級域名跨域請求

如果網站 的地址 在 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";
            }
        }
    }
    
   ...
}


參考

nginx配置允許指定域名下所有二級域名跨域請求