Nginx 配置文件主要分成四部分:main(全局設置)、http(HTTP 的通用設置)、server(虛擬主機設置)、location(匹配 URL 路徑)。還有一些其他的配置段,如 event,upstream 等。
通用設置
user nginx
指定運行 nginx workre 進程的用戶和組
worker_rlimit_nofile #
指定所有 worker 進程能夠打開的最大文件數
worker_cpu_affinity
設置 worker 進程的 CPU 粘性,以避免進程在 CPU 間切換帶來的性能消耗。如 worker_cpu_affinity 0001 0010 0100 1000;(四核)
worker_processes 4
worker 工作進程的個數,這個值可以設置為與 CPU 數量相同,如果開啟了 SSL 和 Gzip,那么可以適當增加此數值
worker_connections 1000
單個 worker 進程能接受的最大并發連接數,放在 event 段中
error_log logs/error.log info
錯誤日志的存放路徑和記錄級別
use epoll
使用 epoll 事件模型,放在 event 段中
http 服務器
server {}:
定義一個虛擬主機
listen 80;
定義監聽的地址和端口,默認監聽在本機所有地址上
server_name NAME [...];
定義虛擬主機名,可以使用多個名稱,還可以使用正則表達式或通配符。
sendfile on
開啟 sendfile 調用來快速的響應客戶端
keepalive_timeout 65
長連接超時時間,單位是秒。
send_timeout
指定響應客戶端的超時時間
client_max_body_size 10m
允許客戶端請求的實體最大大小
root PATH
設置請求 URL 所對應資源所在文件系統上的根目錄
location [ = | ~ | ~* | ^~ ] URI { ... }
設置一個 URI 匹配路徑
- =:精確匹配
- ~:正則表達式匹配,區分字符大小寫
- ~*:正則表達式匹配,不區分字符大小寫
- ^~:URI 的前半部分匹配,且不實用正則表達式
- 優先級:
- = > location 完整路徑 > ^~ > ~ > ~* > location 起始路徑 > location /
allow 和 deny
基于 IP 訪問控制,如:
僅允許 192.168.0.0/24 網段客戶端訪問
1
2
|
allow 192.168.0.0/24; deny all; |
stub_status on
開啟狀態顯式,僅能用于 location 中:
開啟狀態顯式頁面
1
2
3
4
5
|
location /status { stub_status on; allow 172.16.0.0/16; deny all; } |
rewrite <REGEX> <REPL> <FLAG>
URL 重寫,可以使用多種標記
例如:
1
|
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break; |
可用的 flag:
- - last:重寫完成后,繼續匹配其他 rewrite 規則
- - break:重寫完成后不再繼續匹配
- - redirect:返回 302 重定向(臨時重定向),客戶端對重定向的 URL 發起新的請求
- - permanent:返回 301 重定向(永久重定向),客戶端對重定向的 URL 發起新的請求
詳盡配置說明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
#定義Nginx運行的用戶和用戶組 user www www; #nginx進程數,建議設置為等于CPU總核心數。 worker_processes 8; #全局錯誤日志定義類型,[ 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的值保持一致。 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; } #設定http服務器 http { include mime.types; #文件擴展名與文件類型映射表 default_type application/octet-stream; #默認文件類型 #charset utf-8; #默認編碼 server_names_hash_bucket_size 128; #服務器名字的hash表大小 client_header_buffer_size 32k; #上傳文件大小限制 large_client_header_buffers 4 64k; #設定請求緩 client_max_body_size 8m; #設定請求緩 sendfile on; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。 autoindex on; #開啟目錄列表訪問,合適下載服務器,默認關閉。 tcp_nopush on; #防止網絡阻塞 tcp_nodelay on; #防止網絡阻塞 keepalive_timeout 120; #長連接超時時間,單位是秒 #FastCGI相關參數是為了改善網站的性能:減少資源占用,提高訪問速度。下面參數看字面意思都能理解。 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzip模塊設置 gzip on; #開啟gzip壓縮輸出 gzip_min_length 1k; #最小壓縮文件大小 gzip_buffers 4 16k; #壓縮緩沖區 gzip_http_version 1.0; #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0) gzip_comp_level 2; #壓縮等級 gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。 gzip_vary on; #limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數的時候需要使用 upstream blog.ha97.com { #upstream的負載均衡,weight是權重,可以根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的幾率越大。 server 192.168.80.121:80 weight=3; server 192.168.80.122:80 weight=2; server 192.168.80.123:80 weight=3; } #虛擬主機的配置 server { #監聽端口 listen 80; #域名可以有多個,用空格隔開 server_name www.ha97.com ha97.com; index index.html index.htm index.php; root /data/www/ha97; location ~ .*.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } #圖片緩存時間設置 location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; } #JS和CSS緩存時間設置 location ~ .*.(js|css)?$ { expires 1h; } #日志格式設定 log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; #定義本虛擬主機的訪問日志 access_log /var/log/nginx/ha97access.log access; #對 "/" 啟用反向代理 location / { proxy_pass http://127.0.0.1:88; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以下是一些反向代理的配置,可選。 proxy_set_header Host $host; client_max_body_size 10m; #允許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數, proxy_connect_timeout 90; #nginx跟后端服務器連接超時時間(代理連接超時) proxy_send_timeout 90; #后端服務器數據回傳時間(代理發送超時) proxy_read_timeout 90; #連接成功后,后端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 proxy_buffers 4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的設置 proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大于這個值,將從upstream服務器傳 } #設定查看Nginx狀態的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; #htpasswd文件的內容可以用apache提供的htpasswd工具來產生。 } #本地動靜分離反向代理配置 #所有jsp的頁面均交由tomcat或resin處理 location ~ .(jsp|jspx|do)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; } #所有靜態文件由nginx直接讀取不經過tomcat或resin location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 15d; } location ~ .*.(js|css)?$ { expires 1h; } } } |