項目前期使用http,後期爲了安全方面的考慮,啓用了https。
項目架構:前端使用nginx做爲多個tomcat實例的反向代理和負載均衡。
實際上只須要在nginx上啓用https便可,使客戶端與nginx以後使用https方式通訊,而nginx與tomcat之間依然以http方式通訊。html
如今須要將以前客戶端全部的http請求所有都自動重定向爲https,只須要在nginx上添加相應配置便可。
以下配置實現來源於Nginx HTTP 跳轉至 HTTPS,可是我都實踐驗證過。
另外,也加入了一些本身的理解整理而成。前端
server { listen 80; server_name domain.com; rewrite ^(.*) https://$server_name$1 permanent; } server { listen 443 ssl; server_name domain.com; ssl on; ssl_certificate /etc/nginx/ssl/domain.com.crt; ssl_certificate_key /etc/nginx/ssl/domain.com.crt; # other }
若是此時nginx做爲Tomcat的前端反向代理的話,須要將相應配置放在配置ssl的server塊中。nginx
server { listen 80; server_name domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name domain.com; ssl on; ssl_certificate /etc/nginx/ssl/domain.com.crt; ssl_certificate_key /etc/nginx/ssl/domain.com.crt; # other }
若是此時nginx做爲Tomcat的前端反向代理的話,須要將相應配置放在配置ssl的server塊中。tomcat
只容許HTTP來訪問時,用HTTP訪問會讓Nginx報497錯誤,而後利用error_page將連接重定向至HTTPS上。安全
server { listen 80; listen 443 ssl; server_name domain.com; ssl on; ssl_certificate /etc/nginx/ssl/domain.com.crt; ssl_certificate_key /etc/nginx/ssl/domain.com.crt; # other error_page 497 https://$server_name$request_uri; }
使用error_page指令時,將http和https的監聽配置寫在同一個server塊中,對應的其餘配置也須要在該server配置塊中完成。
須要注意的是,此時須要將error_page
指令語句寫在最後,不然不能生效。架構
【參考】
http://www.netingcn.com/nginx-rewrite-flag.html 關於nginx rewrtie的四種flag
https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite rewrite指令
https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return return指令
https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page error_page指定
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes 關於497狀態碼在nginx中的擴展應用負載均衡