` nginx(四) | 听云轩

nginx(四)

proxy模块和upstream模块

  • proxy模块

1、proxy_pass URL:

设置代理服务器所使用的协议、上游服务器地址和一个可选的URL被映射到一个位置。这个指令一般用于location中。如:

1
2
3
location /name/ {
proxy_pass http://192.168.1.1/remote/;
}

这里的proxy_pass指定的是一个URL(注意:remote后有一个/),当用户请求中匹配到“/name/",被代理到后端后路径被更改成上游服务器的”/remote/“。又如:

1
2
3
location /name/ {
proxy_pass http://192.168.1.1/remote;
}

此时proxy_pass指定的不是一个URL(/remote后面没有/),当用户的请求匹配到”/name/“时,被代理到后端的时候,会把”/name"添加到proxy_pass路径后面,此时就会被转发到 http: //192.168.1.1/name/

如果location中采用了正则表达式,那proxy_pass一定不能指定成一个URL,而llocation中匹配到的URL将被直接传递给上游服务器。比如:

1
2
3
location ~ ^/name/{
proxy_pass http://192.168.1.1;
}

/name/将被代理为http: //192.168.1.1/name/

2、proxy_connect——timeout TIME;

定义nginx作为代理接收到客户端的请求后,需要把这个请求转发到上游服务器的最大等待时长,默认是60秒,建议不要超过75秒。

3、proxy_cookie_domain off;

proxy_cookie_domain domain replacement;

将upstream server通过Set-Cookie首部设定的domain属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量。

4、proxy_cookie_path off;

proxy_cookie_path path replacement;

将upstream server通过Set-Cookie首部设定的path属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量。

5、proxy_hide_header FIELD;

默认情况下nginx不会将上游服务器的“Date”, “Server”, “X-Pad”, and “X-Accel-…”这些头部字段转发给客户端,使用proxy_hide_header后可以自定义哪些头部字段不被转发。

6、proxy_pass_header FIELD;

与proxy_hide_header相反,定义显式的指定上游服务器的哪些头部字段会转发给客户端。

7、proxy_set_header FILED VALUE;

把客户端发送给nginx代理的首部进行重新定义或附加一个首部,然后传递给上游服务器,VALUE可以是文本、变量或是文本和变量的组合。例如:

1
2
3
4
5
6
7
8
9
10
11
12
server{
listen 80;
server_name www.dyh.com;
location / {
root /web/dyh.com;
index index.html index.htm;
}
location /dyh/ {
proxy_pass http://192.168.1.1/test/;
proxy_set_header X-Real-IP $remote_addr;
}
}

这里定义了一个“X-Real-IP”的首部,这个首部的值是“$remote_addr”,即是客户端的IP地址,这样上游服务器就可以收到这个自定义的首部,可以利用此手段让上游服务器在访问日志中能够记录真实请求服务的IP地址,而不是记录的全是来自nginx代理的IP地址,有利于做日志分析。

8、proxy_redirect [ default|off|redirect replacement ];

重写location并刷新从upstream server收到的报文的首部,然后才发送给客户端。

9、proxy_send_timeout TIME;

在连接断开之前两次连续发送至upstream server的写操作的最大间隔时长,默认是60秒。

10、proxy_read_timeout TIME;

在连接断开之前两次从接收upstream server接收读操作的最大间隔时长,默认是60秒。

11、proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off …;

设置当上游服务器出现哪此错误时,将下一个请求转发到下一个上游服务器。

  • upstream模块

upstream server {…}

用于设置一个服务器组,组内的服务器可以是主机名,也可以是IP地址,服务器支持端口映射功能。只能用户http上下文。

里面参数:

1、weight=number;

设置服务器的权重,默认为1。

2、max_fails=number
默认为1,与参数fail_timeout配合使用,表示在fail_timeout(默认为10s)指定的时间内,向上游服务器转发失败的最大次数,超过则认为上游服务器不可用。

3、backup

定义一个备用服务器,只有当其他所有的服务器都不可用时,这个备用的服务器才启用。

4、down

标记此服务器永久不可用,可作停机维护使用。

5、max_conns=NUMBER

在1.5.9以后,此参数可设置上游服务器的最大并发数,默认为0,表示不作限制。

更多的参数说明可查看这里

------ 本文结束 ------
您的支持将鼓励我继续创作