Nginx+Tomcat Https SSL部署方案


1、軟件版本:

nginx-1.15+

tomcat-8.0+

 

2、先解決一個疑問:Tomcat到底需不需要配置SSL?

答案:不需要

 

3、SSL申請

使用騰訊雲、阿里雲的服務器,會更加方便申請。(申請過程略)

申請完以后會得到兩個文件:

1_www.domain.com_bundle.crt 證書文件
2_www.domain.com.key 私鑰文件

將這兩個文件拷貝到 Nginx 服務器的 /usr/local/nginx/conf 目錄下。

 

4、前提:nginx安裝了ssl模塊,如果沒有安裝,點下面的鏈接:

https://www.cnblogs.com/hunttown/p/5757829.html

 

5、nginx證書部署

server {
     #SSL 訪問端口號為 443
     listen 443 ssl; 
     #填寫綁定證書的域名
     server_name www.domain.com; 
     #證書文件名稱
     ssl_certificate 1_www.domain.com_bundle.crt; 
     #私鑰文件名稱
     ssl_certificate_key 2_www.domain.com.key; 
     ssl_session_timeout 5m;
     #請按照這個協議配置
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
     #請按照這個套件配置,配置加密套件,寫法遵循 openssl 標准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
     ssl_prefer_server_ciphers on;
     location / {
         #網站主頁路徑。此路徑僅供參考,具體請您按照實際目錄操作。
         root /var/www/www.domain.com; 
         index  index.html index.htm;
     }
 }

 

6、部署完畢以后進行測試

./sbin/nginx -t

 

7、有人會出現這個問題:NGINX報錯 : [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead

原因是:新版本nginx需要這樣配置

#
listen 443
ssl on

#改成:
listen 443 ssl

問題解決,SSL部署完畢!

 

8、如何在應用中取https正確的協議

問題:

request.getScheme()     #總是 http,而不是實際的http或https  
request.isSecure()      #總是false(因為總是http)  
request.getRemoteAddr() #總是 nginx 請求的 IP,而不是用戶的IP  
request.getRequestURL() #總是 nginx 請求的URL 而不是用戶實際請求的 URL  
response.sendRedirect( 相對url )  #總是重定向到 http 上 (因為認為當前是 http 請求)  

 

解決辦法:只需要分別配置一下 Nginx 和 Tomcat

(1)配置 Nginx 的轉發項:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

(2)配置Tomcat server.xml 的 Engine 模塊:

<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>

 

問題解決!


免責聲明!

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



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