背景
由於專案需求,安全起見,需要將先前的http介面存取變成https訪問,所以需要設定ssl憑證。專案的架構是這樣的:
基本架構是硬負載(readwhere) 軟負載(nginx) tomcat集群,現在的問題是ssl憑證要配置在哪裡,直接配置在硬負載上?還是分別配置在nginx和tomcat上?還是其他的配置方法呢?
首先在硬負載上配置放棄了,然後透過在網路上尋找資料,發現可以只在nginx上設定證書,就是說nginx存取使用https,而nginx與tomcat之間使用http進行銜接,這樣就遊了一個整體思路。
關於ssl憑證
關於ssl憑證這裡簡單進行介紹,也是因為專案需要,進行了簡單的了解。
ssl憑證分為大致分為三種,網域級(dv)、企業級(ov)、增強級(ev),安全性以及價格依序增加。根據自己的需求選擇,個人使用可以使用dv,便宜;企業用的話一般使用ov,特殊情況下使用ev。
ssl憑證設定
由於nginx對於ssl憑證設定的支援才使得這種實作方式成為了可能,不得不感嘆nginx的強大。
證書準備
nginx配置需要.pem/.crt證書.key秘鑰,如果您現在擁有的是其他形式的證書,請按照相關說明轉化成要求的證書類型,否則是不能完成證書的配置的。一般購買商家都會有對應的轉換工具。
準備好了之後,將憑證和秘鑰放到nginx的conf目錄下(也就是跟設定檔nginx.conf在同一個目錄),這裡特別要注意:
如果是在linux系統下配置,這就算準備好了;
#如果是在windows系統下,需要將.key秘鑰檔案中的密碼移除,否則就會導致配置之後nginx啟動不起來,這裡是一個坑,本人就卡在了這裡,具體處理方法也很簡單,在網上下載openssl的windows版本,然後將cmd切換到bin目錄下,執行openssl rsa -in server.key -out server2.key,產生的server2.key就是設定所需的密碼文件,但需要將文件名稱改成server.key。
修改nginx設定檔
以下是我nginx.conf設定檔的局部,埠著迷沒有使用預設的443,而是改成了8185,根據您的需求進行修改即可,其他配置基本上按照下面就沒問題。
server { listen 8185; server_name localhost; ssl on; ssl_certificate server.pem; ssl_certificate_key server.key; ssl_session_timeout 5m; ssl_protocols tlsv1 tlsv1.1 tlsv1.2; ssl_ciphers high:!rc4:!md5:!anull:!enull:!null:!dh:!edh:!exp:+medium; ssl_prefer_server_ciphers on; location / { proxy_set_header host $host:$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; proxy_connect_timeout 5; proxy_send_timeout 5; proxy_read_timeout 5; proxy_pass http://qlddm_server; }
修改tomcat設定檔
雖然不需要在tomcat設定證書,但是仍然需要修改tomcat的設定server.xml設定文件,具體包含兩個地方:
<connector executor="tomcatthreadpool" port="7083" protocol="org.apache.coyote.http11.http11nio2protocol" connectiontimeout="20000" maxconnections="8000" redirectport="8185" proxyport="8185" enablelookups="false" acceptcount="100" maxpostsize="10485760" compression="on" disableuploadtimeout="true" compressionminsize="2048" acceptorthreadcount="2" compressablemimetype="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" uriencoding="utf-8" />
需要將redirectport和proxyport都修改為您的nginx監聽埠號。
<valve classname="org.apache.catalina.valves.remoteipvalve" remoteipheader="x-forwarded-for" protocolheader="x-forwarded-proto" protocolheaderhttpsvalue="https" httpsserverport="8185"/>
要增加以上的value標籤,注意httpsserverport也需要修改為nginx監聽埠號碼。
以上是Nginx如何設定SSL憑證實現Https訪問的詳細內容。更多資訊請關注PHP中文網其他相關文章!