首頁  >  文章  >  運維  >  nginx中如何升級到支援HTTP2.0

nginx中如何升級到支援HTTP2.0

王林
王林轉載
2023-05-24 22:58:042555瀏覽

一、前言

# ssl写在443端口后面。这样http和https的链接都可以用
    listen 443 ssl http2 default_server;
    server_name chat.chengxinsong.cn;
    
  # hsts的合理使用,max-age表明hsts在浏览器中的缓存时间,includesubdomainscam参数指定应该在所有子域上启用hsts,preload参数表示预加载,通过strict-transport-security: max-age=0将缓存设置为0可以撤销hsts
  add_header strict-transport-security "max-age=63072000; includesubdomains; preload";
    
  ssl_certificate   /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.pem;
    ssl_certificate_key /usr/local/nginx/cert/2540136_chat.chengxinsong.cn.key;
    
  # 分配20mb的共享内存缓存,不同工作进程共享tls会话信息
  # ssl_session_cache shared:ssl:20m;
    
  # 设置会话缓存过期时间1h
  ssl_session_timeout 60m;
    
  # tls协议的合理配置
  # 指定tls协议的版本,不安全的ssl2和ssl3要废弃掉
  ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
    
  # 启用ssl_prefer_server_ciphers,用来告诉nginx在tls握手时启用服务器算法优先,由服务器选择适配算法而不是客户端
  ssl_prefer_server_ciphers on;
    
  # 优先选择支持前向加密的算法,且按照性能的优先顺序排列
  ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:ecdhe:ecdh:aes:high:!null:!anull:!md5:!adh:!rc4;
    
  # 会话恢复的合理使用
  # 配置会话票证,减少了tls握手的开销
  ssl_session_tickets on;

然後執行檢查nginx設定。 nginx -t

nginx中如何升級到支援HTTP2.0

意思是說,http2.0缺少ngx_http_v2_module。 nginx缺少http_ssl_module模組,編譯安裝的時候帶--with-http_ssl_module配置就行了。

二、查資料找原因

出現上面原因是nginx從1.9.5開始,已經用 http_v2_module 模組取代了 ngx_http_spdy_module ,並正式開始支援http2協定。

但是我的nginx是1.12.2。應該不是ngin版本問題

nginx中如何升級到支援HTTP2.0

注意事項:

#1、並且需要openssl函式庫的版本在1.0.2以上編譯。 1.要開啟http/2協定支持,需要在nginx 1.10以上版本並且需要openssl函式庫的版本在1.0.2以上編譯。

2.http2.0只支援開啟了https的網站。

可能是伺服器的openssl函式庫的版本,發現是1.0.2。

所以還是要升級到更高點。

三、升級openssl

在http2.0協定中,涉及到alpn(application layer protocol negotiation,應用層協定協商)的支持,目前所有主流的unix伺服器系統內建的openssl函式庫都低於1.0.2版本。透過使用openssl的命令列工具,可以檢查目前的http2服務是否支援alpn。

找一個安裝目錄

1、下載最新版的openssl函式庫編譯安裝

wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar xzf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f
./config --prefix=/usr/local/openssl
make && make install

2.取代舊版函式庫

mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
#链接新库文件
ln -s /usr/local/openssl/lib/libssl.so /usr/local/lib64/libssl.so
ln -s /usr/local/openssl/lib/libcrypto.so /usr/local/lib64/libcrypto.so
#检查更新后的openssl依赖库是否是1.1.0f
strings /usr/local/lib64/libssl.so | grep openssl
#显示结果表明已升级到最新版本链接库
openssl 1.1.0f 25 may 2017

#配置openssl库文件的搜索路径
echo '/usr/local/openssl/lib' >> /etc/ld.so.conf
#使修改后的搜索路径生效
ldconfig -v
#查看openssl版本,结果显示升级成功
openssl version
openssl 1.1.0f 25 may 2017

四、nginx開啟ssl模組

預設編譯的nginx 不包含h2 模組,我們需要加入參數來編譯,截止發文,nginx 1.9 開發版以上版本原始碼需要自己加入編譯參數,從軟體來源倉庫下載的則預設編譯。 nginx 是不再支援 spdy。

如果你編譯的nginx 不支持,那麼在./configure 中加入:--with-http_v2_module ,如果沒有ssl 支持,還需要加入--with-http_ssl_module

# 1.找到原始碼包,查看configure是否支援http2

這時候需要去下載的時候的原始碼資料夾中找到這個configure。注意:不是編譯之後的資料夾。

nginx中如何升級到支援HTTP2.0

在"./configure"配置中,"--with"表示啟用模組,也就是說這些模組在編譯時不會自動建置"--without"表示禁用模組,也就是說這些模組在編譯時會自動構建,若你想nginx輕量級運行,可以去除一些不必要的模組。

執行./configure --help

nginx中如何升級到支援HTTP2.0

從上圖知道了nginx在編譯時不會自動建置http_ssl_module和http_v2_module。所以需要重新編譯nginx。

2、加入參數編譯

我們的新設定資訊就應該這樣寫:

./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-openssl=/home/soft/openssl-1.1.0f

上面的/usr/local/nginx這個路徑是我們編譯之後的套件路徑。

那麼在./configure 中加入:--with-http_v2_module ,如果沒有ssl 支持,還需要加入--with-http_ssl_module,加上剛才更新的openssl到1.1.0,所以需要加上- -with-openssl=/home/soft/openssl-1.1.0f。

執行上面的指令即可,等設定完

設定完成後,執行指令

make

這裡不要進行make install,否則就是覆寫安裝

3、備份和替換

(1)然後備份原有已安裝好的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_07_22.bak

(2)關閉nginx,然後將剛剛編譯好的nginx覆寫原有的nginx

關閉nginx

./nginx -s quit

移動編譯好的nginx到原有的nginx

cp ./objs/nginx /usr/local/nginx/sbin/

(3)啟動nginx

. /nginx
稍等1分鐘作用,然後就可以看到http2.0的效果。

五、查看網站是否是http2.0

右鍵name,勾選protocol,這樣就可以看到http協定。

nginx中如何升級到支援HTTP2.0

上圖截圖網站位址:

比較一下http1.1的網站

nginx中如何升級到支援HTTP2.0

以上是nginx中如何升級到支援HTTP2.0的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除