1. 程式人生 > >nginx做SSL並配合tomcat實現HTTPS訪問

nginx做SSL並配合tomcat實現HTTPS訪問

1、確認已安裝openssl服務,使用 rpm -qa | grep -i openssl 來檢查是否安裝,如果沒有安裝以及其相關如openssl-devel,那麼就去http://rpm.pbone.net/搜尋並下載,通過rpm -ivh xxx.rpm安裝,當然如果能yum安裝最好,yum安裝就是線上安裝,rpm理解為離線安裝。

2、安裝nginx,nginx可以用原始碼安裝,記得./configure --prefix=/usr/local/nginx --with-http_ssl_module。--with-http_ssl_module表示支援SSL。

3、建立證書:

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
最重要的一行是“Common Name”。在這裡輸入您的官方網域名稱,如果您還沒有,請輸入您網站的IP位址。將挑戰密碼和可選的公司名稱留空。
刪除密碼:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

簽署證書
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

4、配置nginx配置檔案:

upstream aaa {     
ip_hash;    #這個配置是nginx的一種策略,對於那種沒有做session共享的應用使用,就比如瀏覽器一開始訪問那個tomcat,那麼該tomcat的sessionid就給瀏覽器,下次訪問時,還會到這個tomcat上,只有當這個tomcat掛了,那麼這個瀏覽器才會要求使用者重新登入。
server 127.0.0.1:18080;    
server 127.0.0.1:28080;    
     }  
     server {
       listen       443 ssl;#開啟HTTPS訪問
       server_name  192.168.101.177;#這個是keepalived生成的虛擬IP
ssl_certificate /etc/nginx/ssl/server.crt;#前面生成的證書
ssl_certificate_key /etc/nginx/ssl/server.key; #前面生成的證書
location /xxx {#工程名,注意如果應用必須帶工程名,那麼工程名只能寫到這,而不能寫到127.0.0.1:18080/xxx那邊,會報錯
            proxy_pass   http://aaa; 這裡的aaa就是上面upstream的aaa

#配置 Nginx 的轉發選項
   proxy_set_header HOST $host;  #其中Host $host:$server_port; 非80埠 要port。用80埠時 不需要$server_port 
               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; 
        }

       
    }
    server {
        listen       80;
        server_name  192.168.101.177;
rewrite ^(.*) https://$server_name$1 permanent;強制重定向到https服務

        location /xxx {

proxy_pass   http://aaa;

    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;  
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        } 
    }

5、配置tomcat的server.xml

在Engine 模組下配置一個 Value:

<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For"protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>非80埠時,要再加一個httpsServerPort="xxx" 這種方式實現了外部通過https訪問,但nginx和tomcat還是走http協議。 參考http://blog.csdn.net/woshizhangliang999/article/details/51861998 和http://blog.csdn.net/cangzihu/article/details/53488996以及http://blog.csdn.net/vfush/article/details/51086274、http://blog.csdn.net/hanshileiai/article/details/54579948