天天看點

源碼編譯更新nginx到最新版本,并開始nginx支援http2協定子產品.

最近因為遷移公司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設定。

繼續閱讀