最近因為遷移公司vm上的代碼,遇到一些問題。有一台vm配置了https協定,原以為遷移安全證書以後,配置nginx就可以了,但是修改nginx配置檔案以後,執行 nginx -t 指令後,報如下錯誤:
在網上google了一下,發現原因和nginx的版本有關。遷移前的vm環境,nginx是1.8版本的,新vm上的nginx是1.10的。按照官方的說明,在1.9.5以上版本,如果要啟用ssl協定,需要将原來配置ssl的寫法改一下:
舊的ssl配置寫法:listen 443 ssl spdy;
新的寫法:listen 443 default_server ssl http2
修改後執行 nginx -t,報錯如下資訊:
原因是nginx從1.9.5開始,已經用 http_v2_module 子產品替換了 ngx_http_spdy_module ,并正式開始支援http2協定。是以,沒辦法了,隻好下載下傳新版nginx的源碼,重新編譯更新。
關于spdy和http2協定的一些内容說明,可以一下内容:
下面記錄一下這次更新nginx和配置ssl的過程。
一.注意事項:
1.要開啟http/2協定支援,需要在nginx 1.10以上版本并且需要openssl庫的版本在1.0.2以上編譯。
2.http2.0隻支援開啟了https的網站。
二. 更新openssl
在http2.0協定中,涉及到alpn(application layer protocol negotiation,應用層協定協商)的支援,目前所有主流的unix伺服器系統中内置的openssl庫都低于1.0.2版本。通過使用openssl的指令行工具,可以檢查目前的http2服務是否支援alpn。
如果報錯:
說明目前openssl版本不支援,執行 如下指令,檢查openssl的版本:
我本地目前版本是 openssl 1.0.1e-fips,需要更新。
<a href="http://baike.baidu.com/link?url=3auw8rzkdthsu5qofoyl6frdft5huytws_hsbldqkm3l9fkutqcy9tw_mef6xlcqz7mcwfab0sdfx6q98purvq" target="_blank">關于openssl的定義</a>
具體的操作步驟:
1.下載下傳最新版的openssl庫編譯安裝
2.替換舊版本庫
三.更新nginx
1.下載下傳最新版nginx源碼并解壓編譯
編譯完成後,執行make,但不執行make install
将舊版本的nginx二進制檔案,重命名一個名字,在這期間,目前運作的nginx程序不會停止,不影響應用運作。
然後将上一步通過make編譯好的新版nginx二進制檔案,拷貝到運作目錄
在源碼目錄根目錄下,執行更新安裝指令
注意:如果原來的相關配置檔案中,寫有和ssl有關的配置資訊,需要先暫時注釋掉,否則更新時會報錯。
更新完成後,執行
可以看到nginx已經更新到1.10.3版本。
完成以上操作,就完成了nginx的更新,并已開啟對http2和https的最新支援。
四.修改相關nginx配置檔案
在需要打開https協定支援的應用配置檔案中,加入如下内容:
重新開機nginx完成https設定。