NGINX高性能Web服務器詳解(讀書筆記)


原文地址:NGINX高性能Web服務器詳解(讀書筆記) 作者:夏寥寥

第4章  Nginx服務器的高級配置

4.1 針對IPv4的內核7個參數的配置優化

說明:我們可以將這些內核參數的值追加到Linux系統的/etc/sysctl.conf文件中,然后使用如下命令使修改生效:
/sbin/sysctl -p

(1)net.core.netdev_max_backlog參數
表示當每個網絡接口接收數據包的速度比內核處理這些包的速率快時,允許發送到隊列的數據包的最大數目。默認值為128.
Nginx服務器中定義的NGX_LISTEN_BACKLOG的默認值為511.
(2)net.core.somaxconn參數
該參數用於調節系統同時發起的TCP連接數,默認值為128.在客戶端存在高並發請求的情況下,該默認值較小,可能導致鏈接超時或者重傳問題,我們可以根據實際需要結合並發請求數來調節此值。
(3)net.ipv4.tcp_max_orphans參數
該參數用於設定系統中最多允許存在多少TCP套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,沒有與用戶文件句柄關聯的TCP套接字將立即被復位,同時給出警告信息。這個限制只是為了防止簡單的Dos攻擊。
(4)net.ipv4.tcp_max_syn_backlog參數
該參數用於記錄尚未收到客戶端確認信息的連接請求的最大值。對於128MB內存的系統來說,默認值是1204。小內存系統是128.
(5)net.ipv4.tcp_timestamps參數
該參數用於設定時間戳,可避免序列號的卷繞。當此值賦值為0時,禁用對於TCP時間戳的支持。對於Nginx服務器來說,建議關閉。
(6)net.ipv4.tcp_synack_retires參數
該參數用於設置內核放棄TCP連接之前向客戶端發送SYN+ACK包的數量,一般賦值為1.
(7)net.ipv4.tcp_syn_retires參數
與上個參數類似,該參數設置內核放棄建立連接之前發送SYN包的數量,一般賦值為1.


4.2針對CPU的Nginx配置優化的2個指令

(1)work_process指令
用來設置nginx服務器的進程數。一般設置和CPU的核心數相同,或者倍數。
(2)work_cou_affinity指令
該指令用來為每個進程分配COU的工作內核。

4.3與網絡連接相關配置的4個指令

(1)keepalive_timeout指令
用來設置Nginx服務器與客戶端保持連接的超時時間。有2個設置選項,中間用空格隔開。
第一個選項指定客戶端與連接保持活動的超時時間,在這個時間之后,服務器會關閉此連接;
第二個選項可選:指定了使用Keep_Alive消息頭保持活動的有效時間,如果不設置它,Nginx服務器不會向客戶端發送Keep_Alive消息頭以保持與客戶端某些瀏覽器的連接,超過設置的時間后,客戶端就可以關閉連接,不需要服務器關閉了。
(2)send_timeout指令
用於設置Nginx服務器響應客戶端的超時時間,這個超時時間僅針對兩個客戶端和服務器之間建立連接后,某個活動之間的時間,如果這個時間后客戶端沒有任何活動,Nginx服務器將會關閉連接。
(3)client_header_buffer_size指令
用於設置Nginx服務器允許的客戶端請求頭部的緩沖區大小,默認為1kb.此指令可根據系統分頁大小來設置。獲取分頁大小的命令:getconf PAGESIZE

Nginx出現400錯誤,很大一部分情況是客戶端的請求頭部過大造成的。設置請求頭部大小:
client_header_buffer_size 4k;
(4)multi_accept指令
用於配置Nginx服務器是否盡可能多的接收客戶端的網絡連接請求。默認值為off.

4.4與事件驅動模型相關的配置的8個指令

(1)use指令
用於指定Nginx服務器使用的事件驅動模型;

(2)worker_connections指令
用於設置Nginx服務器的每個工作進程允許同時連接客戶端的最大數量。
Client=worker_processes * worker_connections/2.

(3)worker_rlimit_sigpending指令
用於設置Linux 2.6.6版本之后Linux平台的事件信號隊列長度上限。它主要影響事件驅動模型中rtsig模型可以保存的最大信號數。

(4)devpoll_changes和devpoll_events指令
用於設置在/dev/poll事件驅動模型下Nginx服務器可以與內核之間傳遞事件的數量。前者設置傳遞給內核的事件數量,
后者設置從內核獲取的事件數量。默認值為32

(5)kqueue_changes和kquue_events指令
用於設置在kqueue事件驅動模型下Nginx服務器可以與內核之間傳遞事件的數量。前者設置傳遞給內核的事件數量,
后者設置從內核獲取的事件數量。默認值為512.

(6)epoll_events指令
用於設置在epoll事件驅動模型下Nginx服務器可以與內核之間傳遞事件的數量。默認值為512.
注意:與其他事件驅動模型不同,epoll模型下Nginx服務器向內核傳遞事件的數量和從內核獲取的事件數量是相等的。所以,
不存在epoll_changes指令。

(7)rtsig_signo指令
用於設置rtsig模式使用的2個信號中的第一個,第二個信號是在第一個信號的編號上加1.默認的第一個信號設置為:
SIGRTMIN+10

(8)rtsig_overflow_*指令
該指令有3個具體的指令,rtsig_over_events、rtsig_over_test、rtsig_over_threshold指令。這些指令用來控制當rtsig模式中信號隊列溢出時Nginx服務器的處理方式。
rtsig_over_events:指定隊列溢出時使用poll庫處理的事件數,默認值為16.
tsig_over_test:指定poll庫處理完第幾件事后將清空rtsig模型使用的信號隊列,默認值為32.
tsig_over_threshold:指定rtsig模式使用的信號隊列中的事件超過多少時就需要清空隊列了。該指令只對Linux 2.4.x以下版本有效。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM