Server端使用Nginx + Tomcat
Niginx SSL on
Tomcat SSL non
步驟:
1、修改代碼,將外部引用的http js css 文件修改為https,若外部鏈接不支持https 則需將靜態文件下載到項目中 在項目中引用。
2、將申請到的https安全證書放入NGINX目錄
3、修改Nginx配置文件,打開SSL支持,並將安全證書引入配置文件。
4、打開nginx websocket 支持
5、將js ,app中引用的websocket地址由ws改為wss
6、系統會直接調用外部平台的詳情頁面,需要將其代理到https域名,否則頁面無法訪問
7、./nginx -t 測試配置文件是否能夠成功加載,若配置成功則重新加載niginx配置文件 ./nginx -s reload
8、FASTDFS文件服務器暫時不用https處理,http文件也可以訪問
升級完成后測試點
1.系統各個頁面,圖標能正常訪問
2.app調用接口能正常訪問
3.app,web 跟蹤頁圖片視頻正常顯示
4.銳明科技引用頁面正常訪問
5.監控大屏正常訪問數據顯示正常
6.外部平台能正常調用平台https接口
注意事項:
1、NGINX 缺少SSL模塊
在centos中,配置nginx的https時,出現如下錯誤。
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:102
A)到解壓的nginx目錄下
./configure --with-http_ssl_module
當執行上面語句,出現./configure: error: SSL modules require the OpenSSL library.
用 yum -y install openssl openssl-devel
B)再執行./configure
重新執行./configure --with-http_ssl_module
make ,切記不能make install 會覆蓋。
C)把原來nginx備份
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
把新的nginx覆蓋舊的
cp objs/nginx /usr/local/nginx/sbin/nginx
出現錯誤時cp: cannot create regular file ‘/usr/local/nginx/sbin/nginx’: Text file busy
用cp -rfp objs/nginx /usr/local/nginx/sbin/nginx解決
D)測試nginx是否正確
/usr/local/nginx/sbin/nginx -t
(nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful)
E)重啟nginx
/usr/local/nginx/sbin/nginx -s reload
2、request.getScheme() 取到https正確的協議詳解
A)配置nginx的轉發項,配置文件為nginx.conf,添加以下內容如下:
proxy_set_header X-Forwarded-Proto $scheme;
B) 配置tomcat,配置文件為server.xml,添加內容如下:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>
3. NGINX的匹配順序
location的語法規則如下: location [=|~|~*|^~] /uri/ { … }.
在nginx中location分為兩類:普通location和正則location。普通 location ”是以“ = ”或“ ^~ ”為前綴或者沒有任何前綴的 /uri/,包括“/”;“正則 location ”是以“ ~ ”或“ ~* ”為前綴的 /uri/ 。
那么如果一個 server 塊中編寫了多個 location 的時候,Nginx對於客戶端請求匹配順序如何呢?
官網說明如下:先匹配普通location,取的最大前綴匹配,再匹配正則location,如果匹配到則按照正則匹配,如果有多個正則可以匹配到,則按照第一個匹配結果處理,如果正則匹配失敗則使用普通location的最大前綴匹配。Nginx也設置了幾種機制可以打斷這種順序,分別是“^~ ”、“= ”或者location精確匹配。
簡單的講順序如下:
首先普通location“=”精確匹配;
然后普通location的URL精確匹配;
然后普通location”^~"配置;
然后正則匹配;
然后其他普通location匹配;
最后“/”通用匹配