nginx+tomat https ssl 部署 完美解決方案

關於nginx+tomcat https的部署以前網上一直有2種說法:node

1.nginx和tomcat都要部署ssl證書nginx

2.nginx部署ssl證書,tomcat增長ssl支持apache

 

在實際的部署過程當中nginx的配置和ssl證書部署很順利,可是tomcat用網上流傳的說法配置以後,發現非靜態內容沒法正常使用。(項目用了dubbox,dubbox基於resteasy發佈rest協議)瀏覽器

通過一系列折騰,最終總結出如下經驗,但願能幫到其餘人。tomcat

 

一. 申請SSL證書服務器

     SSL證書其實能夠本身生成,可是由於本身生成的證書不是瀏覽器廠商承認的受信機構頒發,因此瀏覽器會打紅叉!爲了用戶體驗,因此session

咱們要到SSL證書廠商那裏申請SSL證書。我的推薦 globalsign(淘寶用的) wosign.com(價格優惠) startssl(有免費版)。若是使用單域名DV證書,簽發只要15分鐘-2小時。廠商一般會把簽發好的證書以郵件形式發送過來。dom

1. 本身生成 證書籤名請求(CSR)和私鑰(KEY)。能夠使用廠商提供的工具https://www.trustasia.com/tools/csr-generator/  工具

也能夠使用openssl生成 openssl req -new -nodes -newkey rsa:2048 -keyout domain.key -out domain.csr spa

2.把 證書籤名請求(CSR)和私鑰(KEY)提供給廠商。

3.收到廠商簽發好的證書。(私鑰仍是本身的)

 

二.部署證書到nginx並配置

 

nginx的證書部署相對簡單。

1.肯定nginx是否安裝了ssl模塊,若是沒有須要從新mark install。(建議 pcre-8.38 zlib-1.2.8 openssl-1.0.2g  版本過高可能致使編譯失敗)

2.把廠商提供的 x.crt 內容追加到 x.cer, 而後把 x.key 和 x.cer 放到Nginx服務器

3.nginx.conf 增長https支持。主要是配置 80 和 443 端口的監聽

server {
         listen     80;
        server_name  x;
        rewrite ^(.*)$  https://$host$1 permanent; 
        }


  server {
        listen       443;
        server_name  x;
        ssl                  on;
        ssl_certificate      /etc/nginx/server.cer;
        ssl_certificate_key   /etc/nginx/server.key;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

         location / {
              client_max_body_size    16m;
              client_body_buffer_size 128k;
              proxy_pass                          http://online/;
              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 https;
              proxy_next_upstream   off;

              proxy_connect_timeout   30;
              proxy_read_timeout      300;
              proxy_send_timeout      300;
        }

    }

我這裏作了http強跳到https,不須要這個功能,能夠去掉  rewrite ^(.*)$ https:

三.tomcat增長對https協議的支持

 

1.Connector節點加入 redirectPort="443" proxyPort="443"

2.加入新的Value節點 <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto"/>

相關文章
相關標籤/搜索