CentOS上的Nginx在新版Chrome上無法啟動 HTTP/2

我一直以為 我在設定檔裡加入http2 就會開啟http2

server {
    listen  443 ssl http2;

結果我用 Chrome 內建的工具檢查

卻沒有啟動 HTTP/2

chrome://net-internals/#http2

這才驚覺我的網站一直都沒有啟動HTTP/2

原來是 CentOS 內建的OpenSSL版本

沒有支援 ALPN

導致Chrome會自動切換成HTTP/1.1

 # ./openssl version     
OpenSSL 1.0.1e-fips 11 Feb 2013

但是用 yum update這就已經是最新版本

所以只好自己編譯新版OpenSSL了

Google了一下發現

1.0.2版本跟1.1.0以上都有支援ALPN

基本上應該選版本號變動最小的

版本號變動越大

有相依於OpenSSL的程式就越有崩潰的風險

所以選了最新的1.0.2l

過程不外乎就是

wget 下載 source

解壓縮

然後用autoconfig

再來make

make install

# wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
# tar zxvf openssl-1.0.2-latest.tar.gz
# cd openssl-1.0.2l
# ./config
# make
# make test
# make install

接下來就是要重新編譯nginx了

可以參考現有版本的nginx編譯參數

可以用

# nginx -V

獲得

在configure最後再加上

--with-openssl=/xxx/openssl-1.0.2l

–with-openssl=openssl原始碼位置 的參數

再重新make

make install

最後restart nginx就大功告成!

最後別忘記測試是否在Chrome上有開啟HTTP/2了

 

看更多