Nginx 的設置文件主要分為4部門:
main (全局配置) -> 此部門配置的指令將影響其它所有配置
server (主機配置) -> 主要用于指定 "主機" 和 "端口"
upstream (負載平衡配置) -> 用于負載平衡location (URL 匹配特定位置的配置) location (URL 匹配特定位置的配置) -> 匹配網頁文件的范例和位置
#界說Nginx運行的用戶和用戶組
user www www;
#nginx歷程數,發起配置為便是CPU總焦點數。
不必然需要全開,按照環境開,因為每個nginx歷程耗損的內存10兆的閣下。
worker_processes 8;
# 僅合用于linux,利用該選項可以綁定worker歷程和CPU(2.4內核的呆板用不了)
如果是8 cpu 分派如下:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000
00100000 01000000 10000000
# worker_cpu_affinity
#全局錯誤日志界說范例,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;
#歷程文件
pid /var/run/nginx.pid;
#一個nginx歷程打開的最多文件描寫符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx歷程數相除,可是nginx分派請求并不勻稱,所以發起與ulimit -n的值保持一致。此刻在linux 2.6內核下開啟文件打開數為65535,worker_rlimit_nofile就相應應該填寫65535。這是因為nginx調治時分派請求到歷程并不是那么的平衡,所以如果填寫10240,總并發量到達3-4萬時就有歷程大概高出10240了,這時會返回502錯誤。
查察linux系統文件描寫符的要領:
[[email protected] ~]# sysctl -a | grep fs.file
fs.file-max = 789972
fs.file-nr = 510 0 789972
worker_rlimit_nofile 65535;
#事情模式與毗連數上限
events
{
#參考事件模子,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模子是Linux 2.6以上版本內核中的高機能網絡I/O模子,假如跑在FreeBSD上面,就用kqueue模子。
use epoll;
#單個歷程最大毗連數(最大毗連數=毗連數*歷程數)
worker_connections 65535;
# 并發總數是 worker_processes 和 worker_connections 的乘積
# 即 max_clients = worker_processes * worker_connections
# 在配置了反向署理的環境下,max_clients = worker_processes * worker_connections / 4 為什么
# 為什么上面反向署理要除以4,應該說是一個履歷值
# 按照以上條件,正常環境下的Nginx Server可以應付的最大毗連數為:4 * 8000 = 32000
# worker_connections 值的配置跟物理內存巨細有關
# 因為并發受IO約束,max_clients的值須小于系統可以打開的最大文件數
# 而系統可以打開的最大文件數和內存巨細成正比,一般1GB內存的呆板上可以打開的文件數約莫是10萬閣下
# 我們來看看360M內存的VPS可以打開的文件句柄數是幾多:
# $ cat /proc/sys/fs/file-max
# 輸出 34336
# 32000 < 34336,即并發毗連總數小于系統可以打開的文件句柄總數,這樣就在操縱系統可以遭受的范疇之內
# 所以,worker_connections 的值需按照 worker_processes 歷程數目和系統可以打開的最大文件總數舉辦適內地舉辦配置
# 使得并發總數小于操縱系統可以打開的最大文件數目
# 其實質也就是按照主機的物理CPU和內存舉辦設置
# 雖然,理論上的并發總數大概會和實際有所毛病,因為主機尚有其他的事情歷程需要耗損系統資源。
# ulimit -SHn 65535
}
#設定http處事器
http
{
include mime.types; #文件擴展名與文件范例映射表
#默認的數據范例,當范例未界說時利用二進制流的方法,好比未安裝PHP時,是不予理會,用欣賞器會見則呈現下載窗口
default_type application/octet-stream;
#charset utf-8; #默認編碼
server_names_hash_bucket_size 128; #處事器名字的hash表巨細
#客戶請求頭緩沖巨細
nginx默認會用client_header_buffer_size這個buffer來讀取header值,假如
header過大,它會利用large_client_header_buffers來讀取
假如配置過小HTTP頭/Cookie過大 會報400 錯誤 nginx 400 bad request
求行假如高出buffer,就會報HTTP 414錯誤(URI Too Long)
nginx接管最長的HTTP頭部巨細必需比個中一個buffer大,不然就會報400的
HTTP錯誤(Bad Request)。
client_header_buffer_size 32k; #上傳文件巨細限制
large_client_header_buffers 4 64k; #設定請求緩