Nginx性能優(yōu)化的幾個(gè)方法總結(jié)
小伙伴們平時(shí)使用 Nginx 是否有進(jìn)行過(guò)性能優(yōu)化呢?還是軟件裝好了就直接使用呢?
今天小編和大伙分享幾個(gè)常見(jiàn)的 Nginx 優(yōu)化配置。
整體上來(lái)說(shuō),Nginx 的優(yōu)化可以從多個(gè)層面進(jìn)行:
- 系統(tǒng)層面
- 配置層面
- 緩存利用
- 壓縮策略
- 負(fù)載均衡策略
接下來(lái)我們就來(lái)看看具體該如何做。
一 Nginx 配置優(yōu)化
- 調(diào)整
worker_processes參數(shù),通常設(shè)置為等于服務(wù)器的 CPU 核心數(shù)。 - 調(diào)整
worker_connections參數(shù),以增加每個(gè) Worker 進(jìn)程可以打開(kāi)的連接數(shù)。
events {
worker_connections 1024;
}
worker_processes auto;
- 使用 HTTP/2 協(xié)議,利用多路復(fù)用和頭部壓縮等特性,提高頁(yè)面加載速度。
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
}
- 優(yōu)化 SSL/TLS 配置,如關(guān)閉不安全的加密算法、使用 TLS 1.3 等,提高安全性和性能。
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;
二 緩存利用
- 啟用文件緩存,減少磁盤(pán) I/O 操作。
- 使用代理緩存,緩存后端服務(wù)器的響應(yīng)內(nèi)容。
- 設(shè)置合理的緩存過(guò)期策略,通過(guò)
Cache-Control和Expires頭控制瀏覽器緩存的有效期,減少請(qǐng)求次數(shù)。
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}
}
在上面這段配置中,proxy_cache_path 指令用于配置一個(gè)緩存區(qū)域,該區(qū)域用于存儲(chǔ)代理請(qǐng)求的響應(yīng)內(nèi)容。這個(gè)指令通常在 http 塊中使用,并且是 ngx_cache_purge 模塊和 ngx_http_proxy_module 模塊的一部分。
這項(xiàng)配置中的各參數(shù)含義如下:
/data/nginx/cache:這是緩存文件存儲(chǔ)的物理路徑。Nginx 將在該目錄下存儲(chǔ)緩存數(shù)據(jù)。levels=1:2:這定義了緩存文件的目錄結(jié)構(gòu)。在這個(gè)例子中,1:2意味著 Nginx 將緩存文件存儲(chǔ)在/data/nginx/cache下的一級(jí)目錄和二級(jí)目錄中。1代表第一級(jí)目錄的數(shù)量(通常是 3 個(gè),如data、tmp、html),2代表第二級(jí)目錄的數(shù)量(通常是 64 個(gè),基于 0 到 63 的數(shù)字或字母)。keys_zone=my_cache:10m:這定義了一個(gè)共享內(nèi)存區(qū)域,用于存儲(chǔ)緩存鍵和元數(shù)據(jù)。my_cache是該區(qū)域的名稱(chēng),10m表示分配的共享內(nèi)存大小為 10MB。這個(gè)區(qū)域用于存儲(chǔ)緩存的鍵和相關(guān)信息,以便快速檢索和驗(yàn)證緩存的有效性。max_size=10g:這指定了緩存區(qū)域的最大大小,單位是字節(jié)。在這個(gè)例子中,緩存區(qū)域的最大大小為 10GB。當(dāng)緩存數(shù)據(jù)達(dá)到這個(gè)大小時(shí),Nginx 將使用一種策略(通常是最近最少使用 LRU 算法)來(lái)移除舊的緩存數(shù)據(jù),為新的緩存數(shù)據(jù)騰出空間。inactive=60m:這定義了緩存對(duì)象在多久沒(méi)有被訪(fǎng)問(wèn)后會(huì)被認(rèn)為“非活躍”并可能被移除。在這個(gè)例子中,如果一個(gè)緩存對(duì)象在 60 分鐘內(nèi)沒(méi)有被訪(fǎng)問(wèn),它將被認(rèn)為是非活躍的。這個(gè)參數(shù)有助于控制緩存中舊數(shù)據(jù)的生命周期。use_temp_path=off:這指定了是否使用臨時(shí)路徑來(lái)存儲(chǔ)緩存文件。off表示不使用臨時(shí)路徑,所有的緩存文件都直接存儲(chǔ)在指定的/data/nginx/cache路徑下。如果設(shè)置為on,則 Nginx 會(huì)使用一個(gè)臨時(shí)目錄來(lái)存儲(chǔ)緩存文件,在文件被訪(fǎng)問(wèn)后,它們會(huì)被移動(dòng)到永久的緩存目錄中。
三 壓縮策略
- 啟用 Gzip 壓縮,減少數(shù)據(jù)傳輸量,提高響應(yīng)速度。
- 根據(jù)服務(wù)器的 CPU 能力和網(wǎng)絡(luò)條件平衡壓縮級(jí)別和最小壓縮大小,以達(dá)到最佳的性能。
gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 5; gzip_min_length 256; gzip_types text/plain application/xml application/json application/javascript text/css;
各項(xiàng)配置的含義分別如下:
gzip on;:?jiǎn)⒂?Gzip 壓縮。當(dāng)這個(gè)指令被設(shè)置為on時(shí),Nginx 會(huì)嘗試壓縮響應(yīng)體并發(fā)送給客戶(hù)端。gzip_vary on;:這個(gè)指令告訴 Nginx 在響應(yīng)頭中添加Vary: Accept-Encoding。這允許緩存系統(tǒng)(如代理或 CDN)根據(jù)客戶(hù)端是否支持壓縮來(lái)存儲(chǔ)不同的響應(yīng)版本。gzip_proxied any;:這個(gè)指令允許 Nginx 對(duì)從任何代理服務(wù)器接收的響應(yīng)進(jìn)行壓縮,無(wú)論響應(yīng)是否已經(jīng)被壓縮。any表示無(wú)論原始響應(yīng)是否被壓縮,Nginx 都會(huì)嘗試再次壓縮它。其他選項(xiàng)包括off(不壓縮任何代理的響應(yīng))和expired(只壓縮那些已經(jīng)過(guò)期的代理響應(yīng))。gzip_comp_level 5;:這個(gè)指令設(shè)置 Gzip 壓縮級(jí)別。壓縮級(jí)別范圍從 1(最快,壓縮比最低)到 9(最慢,壓縮比最高)。5 是一個(gè)在速度和壓縮比之間取得平衡的常用值。gzip_min_length 256;:這個(gè)指令設(shè)置響應(yīng)體的最小長(zhǎng)度,只有當(dāng)響應(yīng)體大于或等于這個(gè)值時(shí),Nginx 才會(huì)對(duì)其進(jìn)行壓縮。這里設(shè)置為 256 字節(jié),意味著只有當(dāng)響應(yīng)體大于或等于 256 字節(jié)時(shí),才會(huì)進(jìn)行壓縮。gzip_types text/plain application/xml application/json application/javascript text/css;:這個(gè)指令指定了哪些 MIME 類(lèi)型的響應(yīng)應(yīng)該被壓縮。在這個(gè)例子中,文本、XML、JSON、JavaScript 和 CSS 類(lèi)型的響應(yīng)將被壓縮。
四 安全性?xún)?yōu)化
- 隱藏 Nginx 版本號(hào)信息,更改源碼隱藏 Nginx 軟件名及版本號(hào)。
- 修改 Nginx 服務(wù)的默認(rèn)用戶(hù),提高安全性。
- 配置 OCSP stapling、ssl_stapling、ssl_stapling_verify 等以增強(qiáng) SSL/TLS 的安全性。
隱藏版本信息可以提高服務(wù)器的安全性,使攻擊者難以通過(guò)版本信息推斷出服務(wù)器可能存在的安全漏洞。
要隱藏 Nginx 版本號(hào),有三個(gè)辦法,一般來(lái)說(shuō)我們使用第一種方式就可以了。
修改配置文件
在 Nginx 的配置文件中,在 http 塊中添加以下配置:
server_tokens off;
這樣設(shè)置后,Nginx 將不會(huì)在錯(cuò)誤頁(yè)面上顯示版本號(hào)。
配置完成之后,保存配置文件并重新加載 Nginx 以應(yīng)用更改:
nginx -t # 測(cè)試配置文件是否正確 nginx -s reload # 重新加載Nginx配置
這種方法可以隱藏錯(cuò)誤頁(yè)面上的版本信息,但可能無(wú)法完全隱藏所有響應(yīng)頭中的版本信息 。
修改 Nginx 源碼
如果想要從根源上修改 Nginx 版本信息,需要重新編譯 Nginx,步驟如下:
- 修改
src/core/nginx.h文件中的版本定義。 - 修改
src/http/ngx_http_header_filter_module.c文件中的服務(wù)器字符串。 - 修改
src/http/ngx_http_special_response.c文件中的錯(cuò)誤頁(yè)面底部信息。
修改完這些文件后,需要重新編譯 Nginx。這樣編譯安裝后,Nginx 的版本信息將被徹底修改 。
使用第三方模塊
如果需要?jiǎng)討B(tài)修改響應(yīng)頭中的版本信息,可以使用如 headers-more-nginx-module 模塊。這個(gè)模塊允許你動(dòng)態(tài)地添加、修改或刪除 Nginx 的響應(yīng)頭。通過(guò)這個(gè)模塊,可以完全控制 Server 響應(yīng)頭的內(nèi)容 。
選擇哪種方法取決于你的具體需求和環(huán)境。
如果你只是想簡(jiǎn)單地隱藏版本信息,修改配置文件可能是最簡(jiǎn)單的方法。如果你需要更徹底地控制版本信息,可能需要考慮修改源碼并重新編譯 Nginx。
五 監(jiān)控和日志優(yōu)化
- 使用日志分析工具(如 ELK Stack、Graylog 等)來(lái)分析和可視化 Nginx 的日志數(shù)據(jù)。
- 定期維護(hù)策略,如更新 Nginx、審查配置文件、備份配置文件等。
- 使用定時(shí)任務(wù)工具(如 cron)定期清理緩存,使用 Nginx 的
proxy_cache_path指令中的inactive參數(shù)設(shè)置緩存的過(guò)期時(shí)間。
日志配置如下:
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
六 系統(tǒng)層面優(yōu)化
- 調(diào)整文件描述符限制(在
/etc/sysctl.conf中設(shè)置):
fs.file-max = 65535
- 調(diào)整 TCP 連接隊(duì)列大?。ㄔ?nbsp;
/etc/sysctl.conf中設(shè)置):
net.core.somaxconn = 1024
七 故障轉(zhuǎn)移優(yōu)化
- 優(yōu)化健康檢查,調(diào)整健康檢查的頻率、超時(shí)時(shí)間、檢查的內(nèi)容等參數(shù),以更準(zhǔn)確地檢測(cè)服務(wù)器的故障。
- 結(jié)合監(jiān)控系統(tǒng),實(shí)時(shí)監(jiān)控服務(wù)器的健康狀況、請(qǐng)求流量、響應(yīng)時(shí)間等指標(biāo),及時(shí)發(fā)現(xiàn)潛在的問(wèn)題,并進(jìn)行預(yù)警和處理。
配置健康檢查(使用第三方模塊 nginx_upstream_check_module):
upstream backend {
server backend1.example.com check;
server backend2.example.com check;
}
到此這篇關(guān)于Nginx性能優(yōu)化的幾個(gè)方法總結(jié)的文章就介紹到這了,更多相關(guān)Nginx性能優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx+lua+redis實(shí)現(xiàn)限流的示例代碼
本文主要介紹了nginx+lua+redis實(shí)現(xiàn)限流的示例代碼,包括HttpRedis模塊、HttpRedis2Module模塊和lua-resty-redis庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下2025-12-12
Nginx路由匹配規(guī)則及優(yōu)先級(jí)詳解
Nginx作為一個(gè)高性能的Web服務(wù)器和反向代理服務(wù)器,廣泛用于負(fù)載均衡、請(qǐng)求轉(zhuǎn)發(fā)等場(chǎng)景,在配置Nginx時(shí),路由匹配規(guī)則是非常重要的概念,本文將詳細(xì)介紹Nginx的路由匹配規(guī)則及其優(yōu)先級(jí),需要的朋友可以參考下2025-05-05
Windows?Server?Nginx?反向代理Spring?Boot配置無(wú)效報(bào)404未找到的問(wèn)題
一個(gè)Spring?Boot的系統(tǒng),開(kāi)發(fā)完成發(fā)布到Windows服務(wù)器里,使用nginx作為反向代理,修改刷新配置文件,nginx.conf,總是報(bào)錯(cuò)404,這篇文章主要介紹了Windows?Server?Nginx?反向代理Spring?Boot配置無(wú)效?404?未找到的問(wèn)題及解決方案2024-01-01
基于紅帽redhat環(huán)境下配置Nginx Web服務(wù)器
本文詳細(xì)介紹了在RedHat10系統(tǒng)上使用Nginx搭建基于不同IP、端口和主機(jī)名的Web服務(wù)器,并配置基于HTTPS的加密站點(diǎn),具有一定的參考價(jià)值,感興趣的可以了解一下2026-04-04
Nginx 域名SSL證書(shū)配置(網(wǎng)站 http 升級(jí)為 https)
這篇文章主要介紹了Nginx 域名SSL證書(shū)配置(網(wǎng)站 http 升級(jí)為 https),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Nginx同端口部署多個(gè)vue以及unapp項(xiàng)目
文章詳細(xì)介紹了如何在同一端口下部署PC端和App端項(xiàng)目,包括Nginx配置、前端打包配置、manifest.json配置以及針對(duì)Vue3+vite項(xiàng)目的特殊配置,通過(guò)示例項(xiàng)目A和項(xiàng)目B,展示了如何修改Vite配置文件、調(diào)整路由配置,并通過(guò)Nginx進(jìn)行關(guān)鍵配置2026-01-01

