Nginx中配置HTTP/2協(xié)議的詳細(xì)指南
HTTP/2 是 HTTP 協(xié)議的下一代版本,旨在提高性能、減少延遲并優(yōu)化現(xiàn)代網(wǎng)絡(luò)環(huán)境中的通信效率。通過(guò) Nginx 配置 HTTP/2,可以充分利用其多路復(fù)用、頭部壓縮和流量?jī)?yōu)先級(jí)功能,為用戶(hù)提供更快更安全的訪問(wèn)體驗(yàn)。
一、HTTP/2 協(xié)議概述
1.HTTP/2
HTTP/2 是 2015 年發(fā)布的 HTTP 協(xié)議升級(jí)版(RFC 7540)。它在保留 HTTP 核心語(yǔ)義(如請(qǐng)求方法、狀態(tài)碼、URI 和頭部字段)的同時(shí),對(duì)底層的傳輸機(jī)制進(jìn)行了全面優(yōu)化,主要目標(biāo)是提升性能、減少延遲和優(yōu)化資源加載。
2. HTTP/2 的核心特性
多路復(fù)用(Multiplexing):
- 在單個(gè) TCP 連接上同時(shí)發(fā)送多個(gè)請(qǐng)求和響應(yīng),無(wú)需為每個(gè)請(qǐng)求建立獨(dú)立連接。
- 消除了 HTTP/1.1 中的隊(duì)頭阻塞問(wèn)題。
頭部壓縮(HPACK):
使用高效的二進(jìn)制編碼壓縮 HTTP 頭部,減少重復(fù)傳輸相同頭部字段帶來(lái)的開(kāi)銷(xiāo)。
流量?jī)?yōu)先級(jí)(Stream Prioritization):
可為不同的請(qǐng)求分配優(yōu)先級(jí),優(yōu)化關(guān)鍵資源的加載順序。
服務(wù)器推送(Server Push):
服務(wù)器可以在客戶(hù)端請(qǐng)求前主動(dòng)推送資源(如 CSS、JS 文件)。
更安全(通常通過(guò) HTTPS 使用):
雖然 HTTP/2 不強(qiáng)制加密,但主流瀏覽器要求通過(guò) HTTPS 使用。
3. HTTP/2 的優(yōu)勢(shì)
更快的頁(yè)面加載速度。
更高的帶寬利用率。
減少了延遲和連接開(kāi)銷(xiāo)。
改善了移動(dòng)網(wǎng)絡(luò)環(huán)境下的訪問(wèn)體驗(yàn)。
二、Nginx 支持 HTTP/2 的環(huán)境要求
1. 軟件版本要求
Nginx 版本:
- HTTP/2 支持從 1.9.5 開(kāi)始引入。
- 推薦使用 1.21 或更高版本,以獲得最新的優(yōu)化和功能。
OpenSSL 版本:
- 啟用 HTTP/2 時(shí),TLS 協(xié)商需要支持 ALPN(Application-Layer Protocol Negotiation)。
- OpenSSL 版本需為 1.0.2 或更高。
2. 硬件要求
無(wú)特殊硬件要求, HTTP/2 的多路復(fù)用可能增加服務(wù)器的 CPU 和內(nèi)存使用。
三、Nginx 配置 HTTP/2 的詳細(xì)教程
以下是配置 Nginx 支持 HTTP/2 的完整步驟。
1. 安裝或升級(jí) Nginx
檢查當(dāng)前 Nginx 版本
nginx -v
- 如果版本低于 1.9.5,則需要升級(jí)。
- 如果輸出中包含 --with-http_v2_module,說(shuō)明當(dāng)前 Nginx 支持 HTTP/2。
- 如果沒(méi)有 --with-http_v2_module,說(shuō)明當(dāng)前 Nginx 不支持 HTTP/2。需要重新安裝或編譯Nginx。
2. 配置 HTTPS
HTTP/2 通常需要 HTTPS,因此需要先配置 SSL/TLS。
2.1 生成自簽名證書(shū)(僅用于測(cè)試)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx.key \ -out /etc/nginx/ssl/nginx.crt
2.2 安裝 SSL 證書(shū)(生產(chǎn)環(huán)境)
3. 配置 Nginx 支持 HTTP/2
編輯 Nginx 配置文件(如 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf):
基本配置
server { listen 8185 ssl http2; ssl_protocols TLSv1.3 TLSv1.2; # 僅使用 TLS 1.3 和 1.2 ssl_prefer_server_ciphers off; # 優(yōu)先使用服務(wù)器端的加密套件 ssl_ciphers ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA -AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384; ssl_certificate /yourpath/server.crt; # 替換證書(shū)文件路徑 ssl_certificate_key /yourpath/server.key; # 替換私鑰文件路徑 # HTTP/2 參數(shù)優(yōu)化 http2_max_concurrent_streams 128; large_client_header_buffers 4 32k; server_name localhost; root /usr/share/nginx/html/dist/; # 其他配置 # …… }
listen 8185 ssl http2;:
- 這行配置啟用了 SSL 和 HTTP/2。
- HTTP/2 會(huì)默認(rèn)通過(guò) ALPN 協(xié)議協(xié)商。如果客戶(hù)端不支持 HTTP/2,Nginx 會(huì)自動(dòng)回退到 HTTP/1.1,無(wú)需額外定義 listen 指令。
使用 openssl 測(cè)試 ALPN:
openssl s_client -connect ip:port -alpn h2
如果輸出中包含 ALPN protocol: h2,說(shuō)明 ALPN 協(xié)商正常。
四、驗(yàn)證 HTTP/2 配置是否成功
1. 使用瀏覽器驗(yàn)證
打開(kāi)瀏覽器開(kāi)發(fā)者工具(F12)。
轉(zhuǎn)到 Network(網(wǎng)絡(luò))面板。
查看 Protocol 列是否顯示為 h2。
2. 使用 nghttp 工具驗(yàn)證
安裝 nghttp:
sudo yum install nghttp2 -y # CentOS/RedHat
運(yùn)行測(cè)試:
nghttp -v https://example.com
如果輸出中包含 The negotiated protocol: h2,說(shuō)明 HTTP/2 正常工作。
五、常見(jiàn)問(wèn)題及排查
1. 客戶(hù)端不支持 HTTP/2
如果客戶(hù)端不支持 HTTP/2,Nginx 會(huì)自動(dòng)回退到 HTTP/1.1。
2. ALPN negotiation failed 錯(cuò)誤
確保服務(wù)器使用了支持 ALPN 功能的 OpenSSL 版本(1.0.2 或更高)。
檢查是否正確配置了 HTTPS 和 HTTP/2。
3. 配置問(wèn)題導(dǎo)致請(qǐng)求頭不規(guī)范
示例問(wèn)題:
add_header X-Content-Type-Options: nosniff;
原因:X-Content-Type-Options: 的字段名中多了冒號(hào)。HTTP/2 對(duì)頭字段格式要求嚴(yán)格。
修正:
add_header X-Content-Type-Options "nosniff";
4. 性能未顯著提升
檢查是否開(kāi)啟了 Gzip 壓縮。
優(yōu)化 http2_max_concurrent_streams 和 keepalive_timeout。
到此這篇關(guān)于Nginx中配置HTTP/2協(xié)議的詳細(xì)指南的文章就介紹到這了,更多相關(guān)Nginx配置HTTP/2協(xié)議內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于nginx設(shè)置瀏覽器協(xié)商緩存過(guò)程詳解
這篇文章主要介紹了基于nginx設(shè)置瀏覽器協(xié)商緩存過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12nginx強(qiáng)制使用https訪問(wèn)的方法(http跳轉(zhuǎn)到https)
這篇文章主要介紹了nginx強(qiáng)制使用https訪問(wèn)的方法(http跳轉(zhuǎn)到https),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01Nginx轉(zhuǎn)發(fā)丟失cookie表現(xiàn)形式及解決方案
本文主要介紹了Nginx轉(zhuǎn)發(fā)丟失cookie表現(xiàn)形式及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01nginx?添加http_stub_status_module模塊
本文主要介紹了nginx?添加http_stub_status_module模塊,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Nginx HTTP 配置指令的實(shí)現(xiàn)示例
本文主要介紹了Nginx的配置文件結(jié)構(gòu)和HTTP配置指令,涵蓋了從請(qǐng)求處理到安全、日志、負(fù)載均衡、緩存等各個(gè)方面,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12Nginx出現(xiàn)403錯(cuò)誤,應(yīng)該如何解決
這篇文章主要介紹了Nginx出現(xiàn)403錯(cuò)誤,應(yīng)該如何解決?具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Keepalived+Nginx+Tomcat 實(shí)現(xiàn)高可用Web集群的示例代碼
這篇文章主要介紹了Keepalived+Nginx+Tomcat 實(shí)現(xiàn)高可用Web集群的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09