nginx中如何升級到支援HTTP2.0
一、前言
# 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
意思是說,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版本問題
注意事項:
#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。注意:不是編譯之後的資料夾。
在"./configure"配置中,"--with"表示啟用模組,也就是說這些模組在編譯時不會自動建置"--without"表示禁用模組,也就是說這些模組在編譯時會自動構建,若你想nginx輕量級運行,可以去除一些不必要的模組。
執行./configure --help
從上圖知道了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協定。
上圖截圖網站位址:
比較一下http1.1的網站
以上是nginx中如何升級到支援HTTP2.0的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

當 Nginx 服務器宕機時,可執行以下故障排除步驟:檢查 nginx 進程是否正在運行。查看錯誤日誌以獲取錯誤消息。檢查 nginx 配置語法正確性。確保 nginx 具有訪問文件所需的權限。檢查文件描述符打開限制。確認 nginx 正在偵聽正確的端口。添加防火牆規則以允許nginx流量。檢查反向代理設置,包括後端服務器可用性。如需進一步幫助,請聯繫技術支持。
