1、pid的位置及作用
示例:pid pid/nginx.pid;
简介:nginx.pid文件存储master进程的ID,启动、停止nginx时需要使用到。应注意配置的路径Nginx有该目录的写权限。
2、nginx进程数设置
worker_processes 20;
指定Nginx worder进程个数。如果没有阻塞式调用,建议进程个数和CPU内核数相同,如果有阻塞式调用,建议比CPU内核数稍大一点。
3、绑定Nginx worker进程到指定的CPU
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
简介:绑定到不同的CPU可以减少抢占同一个CPU的情况。
4、server匹配规则
首先要匹配listen的端口,然后按照server_name进行匹配。
Host可以与多个server_name匹配时按照以下优先级进行匹配(假设Host为www.xxx.com):
- 所有字符完全匹配的,eg:www.xxx.com
- 通配符在前面的,eg:*.xxx.com
- 通配符在后面的,eg:www.xxx.*
- 正则表达式,eg:~^(?<www>.+)\.xxx\.com$。这里正则表达式的’~‘是必须加的,参见http://nginx.org/en/docs/http/server_names.html。
Host与所有的server_name均不匹配时:
- listen中有default或default_server的server块
- 第一个匹配端口的server块
5、location匹配
语法:location [=|~|~*|^~|@] /uri/ {...}
示例:
|
匹配规则如下(假设请求的uri为/module/controller/action):
- = 表示把URI作为字符串,做完全匹配,eg:location = /module/controller/action
- ~ 表示匹配时是大小写敏感的
- location ~ /module/controller/action匹配成功
- location ~ /Module/Controller/Action匹配失败
- ~* 表示匹配时不区分大小写
- ^~ 表示匹配uri时只要前半部分匹配即可,eg:location ^~ /module/
- @ 表示仅用于Nginx内部的重定向
location在匹配时,若有多个location都可以匹配,是取第一个匹配的location。这点和server的匹配方式不同。
6、定义upstream
upstream块定义了一个上游服务器的集群,在反向代理时通过proxy_pass使用。
upstream xxx_server_name {
server
19.143
.
127.26
:
8240
;
server
19.26
.
208.54
:
8200
backup;
server
19.58
.
37.36
:
8220
backup;
server
19.128
.
168.43
:
8250
backup;
}
location / {
set $subsys xxx;
set $pub_env $
case
;
if
( $pub_env ~
"1"
) {
proxy_pass http:
//xxx_server_name;
break
;
}
if
( $pub_env ~
"2"
) {
proxy_pass http://xxx_server_name;
break
;
}
if
( $pub_env ~
"0"
) {
proxy_pass http:
//wallet-core_wallet-core-prev_server_name;
break
;
}
}
7、什么叫反向代理
说到反向代理,一个好奇的东西肯定就是为什么是“反向”。举个栗子好了,我通过科学上网工具,访问墙外的网站www.xxx.com,www.xxx.com不知道真正请求他的客户端是谁,方向定义为为“正”,代理就是“科学上网工具”;而反向代理,我请求www.xxx.com,而www.xxx.com内部转发给了其他服务器,方向定义为“反”,代理就是负责转发的那台服务器。
8、nginx作为反向代理的作用和特点
书中介绍了Nginx作为反向代理服务器的特点,当客户端发来HTTP请求时,Nginx不会立刻转发到上有服务器,而是把请求完整的接收后,再向上有服务器发起连接,把缓存的客户端请求转发到上游服务器。
这种反向代理的方式,缺点是延长了一个请求的时间、增加了缓存;优点则是减轻了上游服务器的压力,因为外部请求的传输速度相对于内部转发较慢,缓存完外部请求后再请求上游服务器可以减少维持连接的时间,进而减轻了上游服务器的压力。