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 结果是:=