nginx長(zhǎng)連接配置小結(jié)
一、Nginx 長(zhǎng)連接筆記
長(zhǎng)連接的概念和優(yōu)勢(shì)
- 概念:HTTP 長(zhǎng)連接是指在一個(gè) TCP 連接上可以連續(xù)發(fā)送和接收多個(gè) HTTP 請(qǐng)求 / 響應(yīng),而不必在每個(gè)請(qǐng)求后都關(guān)閉連接,從而減少 TCP 連接建立和關(guān)閉的開(kāi)銷,提高性能和效率。
- 優(yōu)勢(shì):對(duì)于頻繁請(qǐng)求資源的場(chǎng)景,如網(wǎng)頁(yè)中包含多個(gè)圖片、腳本、樣式表等文件的加載,長(zhǎng)連接可以顯著減少 TCP 連接握手和揮手的時(shí)間消耗,加快頁(yè)面整體加載速度,降低服務(wù)器負(fù)載,提高用戶體驗(yàn)和服務(wù)器的并發(fā)處理能力。
Nginx 中與長(zhǎng)連接相關(guān)的指令
keepalive_timeout
:- 語(yǔ)法:
keepalive_timeout timeout [header_timeout];
- 作用:設(shè)置長(zhǎng)連接的超時(shí)時(shí)間,即服務(wù)器在保持連接多長(zhǎng)時(shí)間后沒(méi)有新的請(qǐng)求就關(guān)閉連接。第一個(gè)參數(shù)
timeout
是服務(wù)器端等待下一個(gè)請(qǐng)求的超時(shí)時(shí)間,第二個(gè)參數(shù)header_timeout
(可選)是設(shè)置在響應(yīng)頭中Keep-Alive: timeout=xxx
的值,用于通知客戶端連接保持的最長(zhǎng)時(shí)間。如果只設(shè)置一個(gè)參數(shù),則同時(shí)用于服務(wù)器端和響應(yīng)頭。例如:keepalive_timeout 65;
表示服務(wù)器端和客戶端的長(zhǎng)連接超時(shí)時(shí)間均為 65 秒。
- 語(yǔ)法:
keepalive_requests
:- 語(yǔ)法:
keepalive_requests number;
- 作用:設(shè)置在一個(gè)長(zhǎng)連接上允許的最大請(qǐng)求數(shù)量。當(dāng)達(dá)到這個(gè)數(shù)量后,連接將被關(guān)閉并重新建立新的連接。例如:
keepalive_requests 100;
表示一個(gè)長(zhǎng)連接最多處理 100 個(gè)請(qǐng)求后關(guān)閉。
- 語(yǔ)法:
sendfile
:- 語(yǔ)法:
sendfile on | off;
- 作用:用于控制是否啟用高效的文件傳輸模式。在長(zhǎng)連接場(chǎng)景下,開(kāi)啟
sendfile
可以進(jìn)一步提高文件傳輸性能,減少數(shù)據(jù)在內(nèi)核空間和用戶空間之間的拷貝次數(shù)。例如:sendfile on;
開(kāi)啟該功能(默認(rèn)通常是開(kāi)啟的,但不同系統(tǒng)和版本可能有差異)。
- 語(yǔ)法:
tcp_nodelay
:- 語(yǔ)法:
tcp_nodelay on | off;
- 作用:控制是否啟用 TCP_NODELAY 選項(xiàng)。在長(zhǎng)連接中,對(duì)于一些實(shí)時(shí)性要求較高的應(yīng)用(如某些動(dòng)態(tài)網(wǎng)頁(yè)交互),開(kāi)啟
tcp_nodelay
可以減少數(shù)據(jù)傳輸延遲,確保數(shù)據(jù)盡快發(fā)送出去;而對(duì)于一些對(duì)實(shí)時(shí)性要求不高且注重傳輸效率的場(chǎng)景(如大量文件傳輸),可以關(guān)閉它以提高傳輸效率。例如:tcp_nodelay on;
開(kāi)啟該選項(xiàng)(默認(rèn)通常是關(guān)閉的,但不同應(yīng)用場(chǎng)景可能需要調(diào)整)。
- 語(yǔ)法:
長(zhǎng)連接的配置場(chǎng)景和注意事項(xiàng)
配置場(chǎng)景:
- 前端優(yōu)化:對(duì)于提供網(wǎng)頁(yè)服務(wù)的 Nginx 服務(wù)器,配置長(zhǎng)連接可以加速網(wǎng)頁(yè)的加載速度,特別是對(duì)于包含多個(gè)靜態(tài)資源(如圖片、CSS、JavaScript 文件)的網(wǎng)頁(yè)。通過(guò)減少 TCP 連接的建立和關(guān)閉次數(shù),提高資源的并發(fā)獲取效率。
- 后端代理:當(dāng) Nginx 作為后端應(yīng)用服務(wù)器(如 Tomcat、Node.js 等)的代理服務(wù)器時(shí),長(zhǎng)連接可以保持與后端服務(wù)器的持久連接,減少后端服務(wù)器的連接處理開(kāi)銷,提高后端服務(wù)器的性能和吞吐量,同時(shí)也加快了 Nginx 與后端服務(wù)器之間的數(shù)據(jù)傳輸速度。
注意事項(xiàng):
- 服務(wù)器資源:長(zhǎng)連接會(huì)在一段時(shí)間內(nèi)保持連接處于打開(kāi)狀態(tài),因此需要確保服務(wù)器有足夠的資源(如內(nèi)存、文件描述符等)來(lái)處理大量的長(zhǎng)連接。否則,可能會(huì)導(dǎo)致服務(wù)器性能下降甚至資源耗盡。
- 兼容性:雖然大多數(shù)現(xiàn)代瀏覽器和服務(wù)器都支持 HTTP 長(zhǎng)連接,但在一些特定的環(huán)境或較舊的客戶端中,可能存在兼容性問(wèn)題。在配置長(zhǎng)連接時(shí),需要考慮到這些因素,可能需要進(jìn)行一些兼容性測(cè)試,或者提供備用的短連接配置選項(xiàng)。
- 安全考量:長(zhǎng)連接可能會(huì)使服務(wù)器面臨一些安全風(fēng)險(xiǎn),例如長(zhǎng)時(shí)間的連接可能被攻擊者利用來(lái)進(jìn)行惡意攻擊(如連接劫持、慢攻擊等)。因此,在配置長(zhǎng)連接時(shí),需要結(jié)合其他安全措施(如防火墻、入侵檢測(cè)系統(tǒng)等)來(lái)保障服務(wù)器的安全。
二、Nginx 長(zhǎng)連接實(shí)驗(yàn)
實(shí)驗(yàn)環(huán)境準(zhǔn)備
操作系統(tǒng):CentOS 7(或其他兼容的 Linux 發(fā)行版)
安裝 Nginx:
- 使用
yum
包管理器進(jìn)行安裝(以 CentOS 為例): - 更新系統(tǒng)軟件包列表:
sudo yum update -y
- 安裝 Nginx:
sudo yum install nginx -y
創(chuàng)建測(cè)試資源:
- 在 Nginx 的默認(rèn)網(wǎng)頁(yè)目錄(通常為
/usr/share/nginx/html
)下創(chuàng)建一些測(cè)試文件,用于模擬網(wǎng)頁(yè)中的資源加載。例如: - 創(chuàng)建一個(gè)簡(jiǎn)單的 HTML 文件
index.html
:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Nginx Long Connection Test</title> </head> <body> <h1>Nginx Long Connection Test</h1> <img src="image1.jpg" alt="Image 1"> <img src="image2.jpg" alt="Image 2"> <script src="script.js"></script> </body> </html>
- 創(chuàng)建兩個(gè)用于測(cè)試的圖片文件
image1.jpg
和image2.jpg
(可以使用任意小尺寸的圖片),以及一個(gè)簡(jiǎn)單的 JavaScript 文件script.js
:
console.log("Script loaded successfully.");
Nginx 配置修改
- 打開(kāi) Nginx 的主配置文件(通常為
/etc/nginx/nginx.conf
):sudo vi /etc/nginx/nginx.conf
- 在
http
塊內(nèi)添加以下長(zhǎng)連接相關(guān)的配置:
http { # 開(kāi)啟長(zhǎng)連接,設(shè)置超時(shí)時(shí)間為 60 秒(服務(wù)器端和客戶端) keepalive_timeout 60; # 一個(gè)長(zhǎng)連接上允許的最大請(qǐng)求數(shù)量為 100 keepalive_requests 100; # 開(kāi)啟高效的文件傳輸模式 sendfile on; # 關(guān)閉 TCP_NODELAY(可根據(jù)實(shí)際情況調(diào)整) tcp_nodelay off; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; } } }
保存并關(guān)閉配置文件。
實(shí)驗(yàn)測(cè)試步驟
啟動(dòng) Nginx 服務(wù):sudo service nginx start
使用瀏覽器進(jìn)行測(cè)試:
- 打開(kāi)瀏覽器,訪問(wèn)
http://localhost
,瀏覽器將加載index.html
文件以及其中引用的圖片和 JavaScript 文件。 - 在瀏覽器的開(kāi)發(fā)者工具中(一般按 F12 鍵調(diào)出),切換到 “網(wǎng)絡(luò)” 選項(xiàng)卡,觀察資源的加載情況。可以看到,多個(gè)資源是通過(guò)同一個(gè) TCP 連接進(jìn)行加載的,而不是為每個(gè)資源建立一個(gè)新的 TCP 連接,這表明長(zhǎng)連接配置生效。
- 注意觀察資源加載的時(shí)間順序和耗時(shí)情況,可以發(fā)現(xiàn)相比沒(méi)有配置長(zhǎng)連接時(shí),整體頁(yè)面加載速度有所提高,尤其是在加載多個(gè)小資源時(shí),減少了連接建立和關(guān)閉的開(kāi)銷。
使用命令行工具進(jìn)行測(cè)試(可選):
- 可以使用
curl
命令來(lái)模擬 HTTP 請(qǐng)求,并查看連接的相關(guān)信息。例如:
curl -v http://localhost/index.html
- 在
curl
的輸出中,可以查看Connection
頭信息,應(yīng)該顯示為Keep-Alive
,表示使用了長(zhǎng)連接。同時(shí),可以通過(guò)多次執(zhí)行curl
命令來(lái)觀察連接的復(fù)用情況,以及在達(dá)到keepalive_requests
設(shè)置的最大請(qǐng)求數(shù)量后,連接是否重新建立。
進(jìn)一步的實(shí)驗(yàn)和擴(kuò)展
- 調(diào)整長(zhǎng)連接參數(shù):修改
keepalive_timeout
和keepalive_requests
的值,觀察對(duì)頁(yè)面加載速度和服務(wù)器性能的影響。例如,增大keepalive_timeout
可能會(huì)使長(zhǎng)連接保持更長(zhǎng)時(shí)間,對(duì)于頻繁訪問(wèn)的網(wǎng)頁(yè)可能有更好的性能表現(xiàn),但也會(huì)占用更多的服務(wù)器資源;減小keepalive_requests
可能會(huì)導(dǎo)致連接更頻繁地關(guān)閉和重新建立,適用于對(duì)連接穩(wěn)定性要求較高的場(chǎng)景。 - 結(jié)合后端應(yīng)用測(cè)試:如果 Nginx 作為后端應(yīng)用服務(wù)器的代理,配置后端應(yīng)用的長(zhǎng)連接參數(shù)(不同后端應(yīng)用的配置方式不同,如 Tomcat 可以在
server.xml
文件中配置連接相關(guān)參數(shù)),然后測(cè)試 Nginx 與后端應(yīng)用之間的長(zhǎng)連接性能,觀察對(duì)整個(gè)應(yīng)用系統(tǒng)性能的提升效果。 - 壓力測(cè)試和性能分析:使用工具(如
ab
(Apache Benchmark)或wrk
等)對(duì)配置長(zhǎng)連接后的 Nginx 服務(wù)器進(jìn)行壓力測(cè)試,模擬多個(gè)并發(fā)用戶請(qǐng)求網(wǎng)頁(yè)資源,分析服務(wù)器的性能指標(biāo)(如吞吐量、響應(yīng)時(shí)間、并發(fā)連接數(shù)等),評(píng)估長(zhǎng)連接配置在高負(fù)載情況下的優(yōu)勢(shì)和潛在問(wèn)題,并根據(jù)測(cè)試結(jié)果進(jìn)一步優(yōu)化服務(wù)器配置。
通過(guò)以上實(shí)驗(yàn),可以深入了解 Nginx 長(zhǎng)連接的配置方法和實(shí)際效果,以及如何根據(jù)不同的應(yīng)用場(chǎng)景進(jìn)行優(yōu)化和調(diào)整,以提高服務(wù)器的性能和用戶體驗(yàn)。在實(shí)際的生產(chǎn)環(huán)境中,還需要結(jié)合具體的業(yè)務(wù)需求、服務(wù)器資源和網(wǎng)絡(luò)狀況等因素,綜合考慮長(zhǎng)連接的配置參數(shù),確保服務(wù)器的穩(wěn)定高效運(yùn)行。
到此這篇關(guān)于nginx長(zhǎng)連接配置小結(jié)的文章就介紹到這了,更多相關(guān)nginx長(zhǎng)連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx上傳文件大小報(bào)錯(cuò)500的解決辦法
這篇文章主要介紹了nginx上傳文件大小報(bào)錯(cuò)解決辦法的相關(guān)資料,小文件可以提交,大文件會(huì)報(bào)500內(nèi)部錯(cuò)誤,這里提供解決辦法,需要的朋友可以參考下2017-08-08騰訊云CentOS 6.6快速安裝 Nginx服務(wù)器圖文教程
本文通過(guò)圖文并茂的形式給大家介紹了騰訊云CentOS 6.6快速安裝 Nginx服務(wù)器的方法,介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09基于Nginx實(shí)現(xiàn)限制某IP短時(shí)間訪問(wèn)次數(shù)
這篇文章主要介紹了基于Nginx實(shí)現(xiàn)限制某IP短時(shí)間訪問(wèn)次數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12Nginx隱藏版本號(hào)與網(wǎng)頁(yè)緩存時(shí)間的方法
這篇文章主要介紹了Nginx優(yōu)化之隱藏版本號(hào)與網(wǎng)頁(yè)緩存時(shí)間的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11FastDFS及Nginx整合實(shí)現(xiàn)代碼解析
這篇文章主要介紹了FastDFS及Nginx整合實(shí)現(xiàn)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08