Nginx 反向代理(http轉htpps,並支持80端口繼續提交post請求)


項目是一個web server + 多個client的形式,client由用戶安裝在自己的電腦上

由http升級為https后,我們通過在Nginx做了80端口重定向443的配置,使用戶通過訪問http:xxx.xxxx.com服務器時轉為https:xxxx.xxxx.com

基於這樣的需求我們在做了如下配置:

 

    server {

        listen 443;
        server_name oss-test.intel.com; # 項目域名

        ssl on;
        ssl_certificate xxxx.crt; #(證書公鑰)
        ssl_certificate_key xxxx.key; #(證書私鑰)

        ssl_session_timeout 5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass      http://xxx.xxx.xxx.xxx:8000; # 后台服務 地址
        }

    }

    server {
        listen  80;
        server_name  xxx.xxx.xxx.com;      # 域名
        # to https
        return 301 https://$server_name$request_uri;
}

 

以上配置可滿足http 轉 https需求,

 

可以看到當用戶不指定https協議時發起請求時,nginx已經通過重定向指向了https

但是之前安裝的client還是在向http發送post請求,此時就會出錯,因為上面的nginx重定向會丟失post參數,轉為get請求,而此api只接受post方式

解決方式  重定向於代理方式共存:

修改nginx配置 server 80部分:

server {
        listen  80;
        server_name  xxx.xxx.xxx.com;      # 域名
        if ($request_method ~* GET) {                                    # 如果是是GET請求,直接重定向https
            return 301 https://$server_name$request_uri;
        }

# 否則就會直接請求后台服務器
        location / { proxy_pass http://xxx.xxx.xxx.xxx:8000; # 后台服務 地址  }
}
 
        

 

至此,同時滿足以上兩種需求


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM