events配置部分
worker_connections 1024;html
定義每一個work_process同時開啓的最大鏈接數,即容許最多隻能有這麼多鏈接。linux
accept_mutex on;
當某一個時刻只有一個網絡鏈接請求服務器時,服務器上有多個睡眠的進程會被同時叫醒,這樣會損耗必定的服務器性能。 Nginx中的accept_mutex設置爲on,將會對多個Nginx進程(worker processer)接收鏈接時進行序列化,防止多個進程爭搶資源。 默認就是on。nginx
multi_accept on;
nginx worker processer能夠作到同時接收多個新到達的網絡鏈接,前提是把該參數設置爲on。 默認爲off,即每一個worker process一次只能接收一個新到達的網絡鏈接。bash
use epoll;
Nginx服務器提供了多個事件驅動器模型來處理網絡消息。 其支持的類型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport。 * select:只能在Windows下使用,這個事件模型不建議在高負載的系統使用 * poll:Nginx默認首選,但不是在全部系統下均可用 * kqueue:這種方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系統中是最高效的 * epoll: 這種方式是在Linux 2.6+內核中最高效的方式 * rtsig:實時信號,可用在Linux 2.2.19的內核中,但不適用在高流量的系統中 * /dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64 UNIX 5.1A+操做系統最高效的方式 * eventport: Solaris 10最高效的方式
rewrite中的break和last
兩個指令用法相同,但含義不一樣,須要放到rewrite規則的末尾,用來控制重寫後的連接是否繼續被nginx配置執行(主要是rewrite、return指令)。服務器
示例1(連續兩條rewrite規則):
server{
listen 80;
server_name test.com;
root /tmp/123.com;網絡
rewrite /1.html /2.html ;
rewrite /2.html /3.html ;
}
當咱們請求1.html時,最終訪問到的是3.html,兩條rewrite規則前後執行。curl
break和last在location {}外部性能
格式:rewrite xxxxx break;測試
示例2(增長break):
server{
listen 80;
server_name test.com;
root /tmp/123.com;url
rewrite /1.html /2.html break;
rewrite /2.html /3.html;
}
當咱們請求1.html時,最終訪問到的是2.html
說明break在此示例中,做用是再也不執行break如下的rewrite規則。
但,當配置文件中有location時,它還會去執行location{}段的配置(請求要匹配該location)。
示例3(break後面還有location段):
server{
listen 80;
server_name test.com;
root /tmp/123.com;
rewrite /1.html /2.html break;
rewrite /2.html /3.html;
location /2.html {
return 403;
}
}
當請求1.html時,最終會返回403狀態碼,說明它去匹配了break後面的location{}配置。
以上2個示例中,能夠把break替換爲last,它們二者起到的效果如出一轍。
當break和last在location{}裏面
#示例4(什麼都不加): server{ listen 80; server_name test.com; root /tmp/123.com; location / { rewrite /1.html /2.html; rewrite /2.html /3.html; } location /2.html { rewrite /2.html /a.html; } location /3.html { rewrite /3.html /b.html; } } #當請求/1.html,最終將會訪問/b.html,連續執行location /下的兩次rewrite,跳轉到了/3.html,而後又匹配location /3.html #示例5(增長break): server{ listen 80; server_name test.com; root /tmp/123.com; location / { rewrite /1.html /2.html break; rewrite /2.html /3.html; } location /2.html { rewrite /2.html /a.html; } location /3.html { rewrite /3.html /b.html; } } #當請求/1.html,最終會訪問/2.html #在location{}內部,遇到break,本location{}內以及後面的全部location{}內的全部指令都再也不執行。 #示例6(增長last): server{ listen 80; server_name test.com; root /tmp/123.com; location / { rewrite /1.html /2.html last; rewrite /2.html /3.html; } location /2.html { rewrite /2.html /a.html; } location /3.html { rewrite /3.html /b.html; } } #當請求/1.html,最終會訪問/a.html #在location{}內部,遇到last,本location{}內後續指令再也不執行,而重寫後的url再次從頭開始,從頭至尾匹配一遍規則。
- 當rewrite規則在location{}外,break和last做用同樣,遇到break或last後,其後續的rewrite/return語句再也不執行。但後續有location{}的話,還會近一步執行location{}裏面的語句,固然前提是請求必需要匹配該location。
- 當rewrite規則在location{}裏,遇到break後,本location{}與其餘location{}的全部rewrite/return規則都再也不執行。
- 當rewrite規則在location{}裏,遇到last後,本location{}裏後續rewrite/return規則不執行,但重寫後的url再次從頭開始執行全部規則,哪一個匹配執行哪一個。
nginx location優先級
= 高於 ^~ 高於 ~* 等於 ~ 高於 /
對比/和~
示例1: server{ listen 80; server_name www.aminglinux.com; root /tmp/123.com; location /abc/ { echo "/"; } location ~ 'abc' { echo "~"; } } #測試命令:curl -x127.0.0.1:80 'www.aminglinux.com/abc/1.png' #結果是:~
對比~和~*
示例2: server { listen 80; server_name www.aminglinux.com; root /tmp/123.com; location ~ 'abc' { echo '~'; } location ~* 'abc' { echo '~*'; } } 測試命令:curl -x127.0.0.1:80 'www.aminglinux.com/abc/123.html' 結果是:~ 示例3: server { listen 80; server_name www.aminglinux.com; root /tmp/123.com; location ~* 'abc' { echo '~*'; } location ~ 'abc' { echo '~'; } } 測試命令:curl -x127.0.0.1:80 'www.aminglinux.com/abc/123.html' 結果是:~* 結論:~和~*優先級實際上是同樣的,若是兩個同時出現,配置文件中哪一個location靠前,哪一個生效。
對比^~和~
示例4: server { listen 80; server_name www.aminglinux.com; root /tmp/123.com; location ~ '/abc' { echo '~'; } location ^~ '/abc' { echo '^~'; } } 測試命令:curl -x127.0.0.1:80 'www.aminglinux.com/abc/123.html 結果是:^~
對比=和^~
示例5: server { listen 80; server_name www.aminglinux.com; root /tmp/123.com; location ^~ '/abc.html' { echo '^~'; } location = '/abc.html' { echo '='; } } 測試命令:curl -x127.0.0.1:80 'www.aminglinux.com/abc.html 結果是:=