目錄
nginx性能調優
更改進程數與連接數
進程數
連接數
靜態緩存功能設置
日志切割
配置網頁壓縮
nginx 的深度監控
GoAccess 簡介
GoAccess安裝
?編輯
配置中文環境
GOAccess生成中文報告
測試訪問
nginx vts 簡介
nginx vts 安裝
nginx配置開啟vts
測試訪問
::
nginx性能調優
更改進程數與連接數
進程數
在高并發環境中,需要啟動更多的 Nginx 進程以保證快速響應,用以處理用戶的請求,避免造成阻塞。使用 ps aux 命令查看 Nginx 運行進程的個數。從命令執行結果可以看出 master process 是 Nginx 的主進程,開啟 1 個;worker process 是子進程,子進程也是開啟了 1 個。修改 Nginx 的配置文件的 worker_processes 參數,一般設為 CPU 的個數或者核數,在高并發的情況下可設置為 CPU 個數或者核數的 2 倍,可以查看 CPU 的核數以確定參數
參數設置為 4,和 CPU 的核數相同。運行進程數多一些,響應客戶端訪問請求時,Nginx 就不會臨時啟動新的進程提供服務,減少了系統的開銷,提升了服務速度。
修改完后,重啟服務,使用 ps aux 查看運行進程數的變化情況。從下面執行結果中可以看出開啟了 1 個主進程和 4 個子進程,參數設置起到了作用。
默認情況下,Nginx 的多個進程可能更多的跑在一顆 CPU 上。為了充分利用硬件多核多 CPU,可以分配不同的進程給不同的 CPU 處理。在一臺 4 核 CPU 服務器上,可以設置每個進程分別由不同的 CPU 核心處理,達到 CPU 的性能最大化。
連接數
單個Worker進程最大并發連接數
所以 nginx 的總并發數計算: 總并發數 = worker_processes × worker_connections
靜態緩存功能設置
當 Nginx 將網頁數據返回給客戶端后,可設置緩存時間,以便在日后進行相同內容的請求時直接返回,以避免重復請求,加快訪問速度。緩存時間一般針對靜態資源進行設置,對動態網頁不用設置緩存時間。
設置靜態資源緩存
然后重新加載或重啟服務。
驗證靜態緩存
通過瀏覽器查看,響應頭中包含字段即為緩存成功設置連接超時
在企業網站中,為了避免同一個客戶長時間占用連接,造成資源浪費,可設置相應的連接超時參數,實現控制連接訪問時間。可以修改配置文件 nginx.conf,設置 keepalive_timeout 超時時間。
默認是60秒/設置超時是180秒/
keepalive_timeout
第一個參數指定了與客戶端的 keep - alive 連接超時時間,服務器將會在這個時間后關閉連接。
可選的第二個參數指定了在響應頭 Keep - Alive: timeout=time 中的 time 值。
這個頭能夠讓一些瀏覽器主動關閉連接,這樣服務器就不必去關閉連接了。沒有這個參數,Nginx 不會發送 Keep - Alive 響應頭。
日志切割
隨著 Nginx 運行時間的增加,產生的日志也會逐漸增加,為了方便掌握 Nginx 的運行狀態,需要時刻關注 Nginx 日志文件。太大的日志文件對監控是一個大災難,不便于分析排查,需要定期的進行日志文件的切割。
Nginx 沒有類似 Apache 的 cronlog 日志分割處理功能,但是可以通過 Nginx 的信號控制功能腳本來實現日志的自動切割,并將腳本加入到 Linux 的計劃任務中,讓腳本在每天的固定時間執行,便可實現日志切割功能。下面是具體操作步驟。
編寫腳本
/opt/fenge.sh,把 Nginx 的日志文件 /usr/local/nginx/logs/access.log 移動到目錄 /var/log/nginx 下面,以當前時間做為日志文件的名稱,然后用 kill - USR1 創建新的日志文件 /usr/local/nginx/logs/access.log,最后刪除 30 天之前的日志文件。
執行/root/fenge.sh,測試日志文件是否被切割
設置ceontab任務,定期執行腳本自動進行日志分割。
即每天的凌晨 1:30 分執行 /opt/fenge.sh 腳本,進行日志分割。
配置網頁壓縮
Nginx 的 ngx_http_gzip_module 壓縮模塊提供了對文件內容壓縮的功能,允許 Nginx 服務器將輸出內容發送到客戶端之前進行壓縮,以節約網站的帶寬,提升用戶的訪問體驗。默認 Nginx 已經安裝該模塊,只需要在配置文件中加入相應的壓縮功能參數對壓縮性能進行優化即可。
- gzip on: 開啟 gzip 壓縮輸出;
- gzip_min_length 1k: 用于設置允許壓縮的頁面最小字節數;
- gzip_buffers 4 16k: 表示申請 4 個單位為 16k 的內存作為壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲 gzip 壓縮結果;
- gzip_http_version 1.0: 用于設置識別 http 協議版本,默認是 1.1,目前大部分瀏覽器已經支持 1.0,1.0 也比較消耗服務器 CPU 資源;
- gzip_comp_level 2: 用來指定 gzip 壓縮比,1 壓縮比最小,處理速度最快;9 壓縮比最大,傳輸速度快,但處理速度最慢,使用默認即可;
- gzip_types text/plain: 壓縮類型,是對哪些網頁文檔啟用壓縮功能;
- gzip_vary on: 選項可以讓前端的緩存服務器緩存經過 gzip 壓縮的頁面。
修改 Nginx 的配置文件,加入壓縮功能參數
注釋:
- gzip on::開啟 Gzip 壓縮功能。
- gzip_buffers 4 64k::設置用于壓縮響應的緩沖區數量和大小,這里表示分配 4 個 64KB 的緩沖區。
- gzip_http_version 1.1::指定啟用 Gzip 壓縮的 HTTP 協議版本,這里是 HTTP 1.1。
- gzip_comp_level 2::設置 Gzip 壓縮的級別,范圍是 1 到 9,2 表示相對較低的壓縮級別(壓縮速度快,壓縮比相對低)。
- gzip_min_length 1k::指定當響應內容長度大于等于 1KB 時才進行 Gzip 壓縮。
- gzip_vary on::向代理服務器發送 Vary: Accept - Encoding 頭信息,讓代理服務器根據客戶端的 Accept - Encoding 頭來決定是否緩存壓縮后的內容。
- gzip_types text/plain text/javascript application/x - javascript text/css text/xml application/xml application/xml+rss::指定對哪些 MIME 類型的內容進行 Gzip 壓縮 。
在 Nginx 工作目錄建立一個超過 1K 大小的 html 文件,然后使用瀏覽器訪問網址驗證,顯示使用 gzip 進行了壓縮,如圖所示。
http://192.168.10.101/index.html
備注:
- -I:該參數的作用是只獲取服務器返回的 HTTP 頭部信息,而不獲取響應的主體內容。
- -H:此參數用于在請求中添加自定義的 HTTP 頭部信息。在這個例子里,添加的頭部信息是 Accept-Encoding: gzip,這表示客戶端(也就是發起請求的一方)支持 gzip 壓縮格式的響應內容。
nginx 的深度監控
GoAccess 簡介
GoAccess 是一個開源實時 Web 日志分析器和交互式查看器,可在 Linux 系統上的終端中或通過瀏覽器運行。它為需要動態可視化服務器報告的系統管理員提供快速且有價值的 HTTP 統計信息。
GoAccess 解析指定的 Web 日志文件并將數據輸出到 X 終端。特點包括:
- 完全實時:所有面板和指標都定時在終端輸出上每 200 毫秒更新一次,在 HTML 輸出上每秒更新一次。
- 所需的最少配置:您只需針對訪問日志文件運行它,選擇日志格式,然后讓 GoAccess 解析訪問日志并向您顯示統計信息。
- 跟蹤應用程序響應時間:跟蹤處理請求所花費的時間。如果您想跟蹤減慢網站速度的頁面,則非常有用。
- 幾乎所有 Web 日志格式:GoAccess 允許任何自定義日志格式字符串。預定義選項包括 Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront 等。
- 增量日志處理:需要數據持久性?GoAccess 能夠通過磁盤持久性選項增量處理日志。
GoAccess 只有一個依賴項:是用 C 編寫的,要運行它,您只需要 ncurses 作為依賴項。就是這樣。它甚至擁有自己的 Web Socket 服務器 ——?Simple WebSocket Server RFC6455 compliant - GWSocket。 - 訪問者:按小時或日期確定點擊量、訪問者、帶寬和最慢運行請求的指標。每個虛擬主機的指標:擁有多個虛擬主機(服務器塊)?它有一個面板,顯示哪個虛擬主機消耗了大部分 Web 服務器資源。
GoAccess安裝
安裝編譯依賴
安裝文本字體支持
源碼編譯安裝GoAccess
--enable-utf8:啟用 Unicode 支持(顯示中文必備)。
--with-openssl:支持 HTTPS 日志分析。
配置中文環境
設置系統locale為中文
驗證Locale是否生效
GOAccess生成中文報告
[PARSING /usr/local/nginx/logs/access.log] {0} @ {0/s}
WebSocket 服務器已準備接收來自客戶的連接
--output=report.html:生成 HTML 報告。
--real-time-html:實時更新報告。
測試訪問
瀏覽器訪問 http:// 你的 ip/report.html
nginx vts 簡介
Nginx 的 VTS 模塊(Virtual Host Traffic Status)是一個開源監控工具,用于實時收集和分析 Nginx 的流量、性能指標及狀態數據。以下是其核心功能和特點:
實時監控
統計每個虛擬主機(server 塊)的請求量(QPS)、帶寬使用、響應時間、連接數等關鍵指標。支持按狀態碼(如 2xx、4xx、5xx)分類統計請求。
數據可視化
提供內置監控頁面(默認路徑 /status),通過圖表和表格展示實時及歷史數據。支持 JSON 格式輸出,方便集成到 Prometheus、Grafana 等監控平臺。
擴展性
通過 Lua 腳本擴展自定義監控邏輯(如記錄特定 API 的響應時間)。可配置數據存儲策略(如保留最近 1 小時的數據)。
報警集成
結合閾值規則觸發告警(需配合外部工具如 Zabbix、Telegram Bot)。
nginx vts 安裝
需要重新編譯 nginx 并擴展 vts 模塊
nginx配置開啟vts
修改nginx配置文件
測試訪問
瀏覽器訪問http://你的ip/vst