項目是一個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; # 后台服務 地址 }
}
至此,同時滿足以上兩種需求