Nginx 是一個免費的開源高性能輕量級 Web 服務器,用作負載均衡器、反向代理、HTTP 緩存和郵件代理。 儘管 Nginx 與其他 Web 服務器相比相當新,但由於其高性能,它的受歡迎程度正在上升。 使用默認的 Nginx 配置,您可能會獲得快速的性能,但我們可以通過更改一些配置來最大限度地提高 Nginx 的性能。
在本文中,您將了解 8 種不同的最佳方法來提升 Nginx 以獲得更好的性能。 為了證明 example 在本文中,我在 Ubuntu 20.04 LTS 系統上安裝了 Nginx。
修改工作進程
Nginx 中的所有 Web 服務器請求都由工作進程處理。 在 Nginx 中,工作進程被架構為多個工作進程來處理請求,一個主進程負責管理所有工作進程以及分析配置。 在 Nginx 的默認配置中,worker process 參數設置為 auto,它根據可用的 CPU 內核生成工作進程。 正如 Nginx 官方文檔所推薦的那樣,這是根據可用 CPU 內核保持工作進程的最佳方式,因此建議使用 auto 參數。 如果您對處理器有多少個內核感到好奇,只需運行以下命令即可。
$ grep processor /proc/cpuinfo | wc -l
您可以從位於的 Nginx 配置文件中更改工作進程的默認值 /etc/nginx/nginx.conf。 如果您的服務器遇到更高的流量並且您需要添加更多工作進程,最好將服務器升級到更多核心處理器。
增強工作人員連接限制
工作連接數是每個可用工作進程可以管理的同時連接總數。 默認情況下,工作進程一次可以管理 512 個連接。 在修改工作連接值之前,您必須檢查最大連接系統以允許使用以下命令根據它更新連接配置。
$ ulimit -n
為了充分發揮 Nginx 的潛力,在 nginx.conf 文件中將工作連接值設置為系統允許的最大連接系統。
實現內容壓縮
對於 Web 內容壓縮,Nginx 使用 gzip 來增加內容交付時間並減少網絡帶寬使用。 在配置中,您可以找到處於註釋狀態的 gzip 配置,但您可以根據需要取消註釋和修改 gzip。 由於 gzip 壓縮過程會使用系統資源,如果您的資源有限,請根據它修改配置,例如僅壓縮特定類型的文件、壓縮級別等。
緩存靜態內容
在現代 Web 開發中,大部分內容都是靜態提供給瀏覽器或客戶端的,因此緩存靜態文件可以更快地加載內容。 當內容從緩存加載時,它還將減少對 Nginx 的連接請求。 要啟動緩存過程,請將以下指令添加到 Nginx 虛擬主機配置文件中。
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;}
上述指令將資源文件緩存 30 天。 您可以根據需要設置緩存到期日期。
緩衝
緩衝可以使客戶端和服務器之間的通信更加高效,因為它會保留部分響應,直到緩衝區填滿為止。 如果響應高於實際緩衝區大小,Nginx 會將響應寫入磁盤,這可能會導致性能問題。 您可以更新以下指令以根據您的要求調整緩衝區大小。
Client_body_buffer_size:它確定用於保存客戶端響應數據的實際緩衝區大小。
Client_header_buffer_size:它管理客戶端標頭的大小。 通常將值設置為 1k 就足夠了。
Client_max_body_size:它限制了客戶端允許的最大正文響應。 如果主體大小超過其值,Nginx 將拋出“請求實體太大”錯誤。
要調整緩衝大小,請在 http 部分添加以下指令。
http { … client_body_buffer_size 80k; client_max_body_size 9m; client_header_buffer_size 1k; ... }
訪問日誌緩衝
日誌記錄是調試問題和審計的關鍵角色之一。 由於日誌記錄會存儲每個請求數據,這些數據會影響 I/O 週期和 CPU,從而導致性能問題。 您可以通過啟用對日誌的緩衝來減少這種影響。 一旦緩衝區大小達到其限制,Nginx 將緩衝區內容寫入日誌。 您可以通過將具有大小值的緩衝區參數添加到訪問日誌指令來啟用緩衝。
access_log /var/log/nginx/access.log main buffer=16k;
或者您可以通過以下方式禁用訪問日誌(如果不需要)。
access_log off;
限制超時值
限制超時值將提高 Nginx 的性能。 Nginx 將在給定的時間段內等待客戶端的正文和標頭請求。 如果他們沒有及時收到響應數據,Nginx 會為相應的客戶端觸發超時。 超時值可以由以下指令管理。 要設置超時持續時間,請在 http 部分中復制粘貼下面給出的指令。
client_body_timeout 10; client_header_timeout 10; keepalive_timeout 13; send_timeout 10;
Client body 和 header timeout 是 Nginx 從客戶端請求中讀取 header 和 body 的時間段。 如果未及時完成,請求將因超時錯誤而終止。 Keepalive_timeout 是 nginx 之後的持續時間 close 客戶端連接保持活動連接保持打開狀態。 Send_timeout 是客戶端必須接收 Nginx 發送的響應的持續時間。
打開文件緩存
在 Linux 中幾乎一切都是一個文件,當使用 open_file_cache 時,文件描述符和所有經常訪問的文件都會緩存到服務器。 特別是當使用打開的文件緩存提供靜態 Html 文件時,將提高 Nginx 的性能,因為它會在給定的時間間隔內打開並在內存中存儲緩存。 將 open_file_cache 的以下指令放在 http 部分以啟動緩存。
http { ... open_file_cache max=1024 inactive=10s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors on;
結論
這是通過簡單修改 Nginx 配置文件來提高 Nginx 性能的 8 種方法。 我希望閱讀本文能幫助您啟動 Nginx 性能提升。