1. 程式人生 > >第四章 Nginx伺服器的高階配置

第四章 Nginx伺服器的高階配置

概述:工作過程關鍵引數配置來提供Nginx伺服器效能

本章涉及內容:

  • 針對IPv4的核心引數優化
  • 針對處理器的指令配置
  • 針對網路連線的指令配置
  • 與事件驅動相關的指令配置

4.1、針對Ipv4的核心7個引數的配置優化

將涉及Ipv4引數追加到Linux系統的/etc/sysctl.conf檔案中,然後需要使用如下命令使之生效

#  /sbin/sysctl -p


1、net.core.netdev_max_backlog引數,預設值128

這是表示當每個網路介面接收資料包的速率比核心處理這些包的速率快,允許傳送到佇列的資料包的最大數目(簡單理解就是,進貨速度快,銷售出去速度慢,這是設定倉庫為最大)

net.core.netdev_max_backlog=262144


2、net.core.somaxconn引數

用於調節系統同時發起的TCP連線數,預設值128

net.core.somaxconn  = 262144

用法如上

3、net.ipv4.tcp_max_orphans 引數

該引數用於設定系統中最多允許存在多少TCP套接字不被關聯到任何一個使用者檔案控制代碼上。(類似共用同一資源)

記憶體比較充足的情況下,可以增大這個引數的值

net.ipv4.tcp_max_orphans = 262144

4、net.ipv4.tcp_max_syn_backlog引數

該引數用於記錄尚未收到客戶端確認資訊的連線請求的最低值。

net.ipv4.tcp_max_syn_backlog=262144

5、net.ipv4.tcp_timestamps引數

該引數用於設定時間戳,可以避免序列化的卷繞,當此值賦值為0時,禁用對於TCP時間戳的支援

net.ipv4.tcp_timestamps = 0

6、net.ipv4.tcp_synack_retries引數

該引數用於設定核心放棄TCP連線之前向客戶端傳送SYN+ACK包的數量。一般賦值為1,即核心放棄連線之前傳送的一次SYN+ACK包

net.ipv4.tcp_synack_retries = 1

7、net.ipv4.tcp_syn_retries引數

設定核心放棄建立連線之前傳送SYN包的數量。

net.ipv4.tcp_syn_retries = 1

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

主要對多核CPU進行配置優化, 兩個指令:worker_processes 和 worker_cpu_affinity

1、worker_processes指令

預設值為1,太高主程序排程負擔加大。針對雙核CPU,建議設定為2或4

worker_processes 4;

2、worker_cpu_affinity指令


摘自《Nginx高效能Web伺服器詳解》

幾核就是幾位二進位制, 每一個工作程序均勻配置不同cpu上 如果是八核(00000002 這也八位)

worker_cpu_affinity 0001 0100 1000 0010;  

4.3、與網路連線配置的4個指令

1.keepalive_timeout 指令

保持連線問題,第一個數字表示,伺服器多久主動斷開連線, 第二個引數表示客戶端(瀏覽器)主動斷開連線(它會發送Keep-Alive訊息頭)

keepalive_timeout 60 50;  單位s

伺服器60s之後主動斷開連線,客戶端(瀏覽器)50s之後主動斷開連線

2.send_timeout 指令

該指令用於設定Nginx伺服器響應客戶端超時的時間

send_timeout 10s;  該設定表示Nginx伺服器與客戶端建立連線後,某次會話中伺服器等待客戶端響應響應10s,就會自動關閉連線

3.client_header_buffer_size指令

該指令用於設定nginx伺服器允許的客戶端請求頭部的緩衝區大小,預設值1kb ,返回400錯誤可能是這個原因

 # getconf PAGESIZE  獲取這個值


顯示4KB

client_header_buffer_size 4k;

4、multi_accept指令

該指令用於配置nginx伺服器是否儘可能多地接收客戶端的網路連線請求,預設值為off

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

1.use 指令

用於指定Nginx伺服器使用的事件驅動模型

2.worker_connections指令

該指令用於設定Nginx伺服器的每個工作程序允許同時連線客戶端的最大數量

worker_connections number

計算同時連線的客戶端最大數量 client = worker_processes*worker_connections/2

worker_connections 65535; 

但是這個最大值受到linux系統本身可以開啟的檔案控制代碼數量限制,所有需要設定open file resource limit

 # cat /proc/sys/fs/file-max

# echo "2390251" /proc/sys/fs/file-max; sysctl -p


3、worker_rlimit_sigpending指令

linux平臺的事件訊號佇列長度上線

worker_rlimit_sigpending limit (超過這個值,會自動交給poll模型處理未處理客戶端請求)

worker_rlimit_sigpending 1024;

4、devpoll_changes 和 devpoll_events指令

這個兩個指令用於設定/dev/poll事件驅動模式下nginx伺服器可以與核心之間傳遞事件的數量,前者設定傳遞給核心的事件數量,後者設定從核心獲取的事件數量

devpoll_changes number

devpoll_events number

number預設值為32

5、kqueue_changes 和 kqueue_events指令

它含義如上,它number預設值為512

6、epoll_events指令

epoll _changes   number   設定epoll事件驅動模式下nginx伺服器可以與核心之間傳遞事件的數量

number預設值為512

7、rtsig_signo指令

該指令用於設定rtsig模式下使用的兩個訊號中的第一個,第二個訊號是在第一個訊號的編號上加1.

rtsig_signo signo

預設的第一個訊號設定為SIGRTMIN+10

檢視linux系統支援SIGRTMIN


8、rtsig_overflow_* 指令

該指令代表三個具體的指令,rtsig_overflow_events 、rtsig_overflow_test 和 rtsig_overflow_threshold

rtsig_overflow_events   指定佇列溢位使用poll庫處理的事件數,預設值16

rtsig_overflow_test   指定poll處理完第幾件事件後將清空rtsig模型使用的訊號佇列,預設值為32

rtsig_overflow_threshold  指定rtsig模式使用的訊號佇列中的事件超過多少時,需要清空佇列。 預設值10