Nginx系列之反向代理相关模块
Posted 小白运维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx系列之反向代理相关模块相关的知识,希望对你有一定的参考价值。
1、ngx_http_proxy_module模块
主要提供反向代理及缓存功能;
1、proxy_pass指令
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;
示例:
location /bbs/ {
proxy_pass http://192.168.1.141;
}
# 访问http://www.codegreen.cn/bbs/此时后端节点收到的请求就是http://192.168.1.141/bbs/
注意:proxy_pass后面是一个uri时,其会将location中的uri替换为后端主机的uri;
示例:
location /bbs/ {
proxy_pass http://192.168.1.141/www/;
}
注意:如果location定义其uri时使用了正则表达式匹配机制,则proxy_pass后的路径必须不能使用uri;
示例:
location ~* \.php$ {
proxy_pass http://192.168.1.141;
}
# 注意:http://192.168.1.141后面一定不能加斜线"/"
2、proxy_set_header指令
设定向后端主机发送请求报文的首部及其值;
配置格式:
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
示例:
# 设置向后端服务器发送的客户端IP地址,用于让后端服务器获取用户真实的IP地址
proxy_set_header X-Real-IP $remote_add;
proxy_set_header X-Forward-For $remote_add;
# 设置向后端服务器发送请求报文中的主机名
proxy_set_header Host $host;
3、proxy_cache_path指令
定义缓存,只能用于http上下文;
注意:当后端存在多个虚拟主机时,必须为每个虚拟主机单独使用一个缓存。
配置格式:
proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]
path:定义缓存数据存放的根目录,改路径应该是预先存在于磁盘上的。
levels:设置缓存目录的层级结构。
keys_zone=name:size:name设定缓存区域的名称自定义,size表示使用多大的内存空间缓存;
inactive=time:设置缓存超时时长;
max_size=size:设置数据在磁盘中可使用的最大空间,超过此空间将使用LRU最近最少使用算法删除缓存;
示例:
proxy_cache_path /var/cache/nginx/proxy levels=2:1 keys_zone=pcache:10m max_size=1g;
4、proxy_cache指令
调用缓存,默认为off;
注意:当后端存在多个虚拟主机时必须为每个虚拟主机单独使用一个缓存。
配置格式:
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
示例:
proxy_cache pcache;
5、proxy_cache_key指令
定义缓存键;
配置格式:
Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
6、proxy_cache_valid指令
为不同的响应码设置不同的缓存时长;
配置格式:
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
示例:
proxy_cache_valid 200 301 302 10m;
proxy_cache_valid 404 1m;
7、proxy_read_timeout指令
等待后端服务器发送响应报文的超时时长,默认为60秒。当后端服务器特别繁忙,请求处理不过来超出此处设置的时长时nginx反向代理就会返回给用户502的错误;
配置格式:
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
8、proxy_connect_timeout指令
与后端服务器建立连接的超时时长;默认为60秒;最长为70秒;
配置格式:
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
9、proxy_send_timeout指令
向后端服务器发送请求报文的超时时长;默认60秒。
配置格式:
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
2、ngx_http_headers_module模块
用于在响应给客户端报文中添加首部;
1、add_header指令
向响应报文添加自定义首部,并赋值。
配置格式:
Syntax: add_header name value [always];
Default: —
Context: http, server, location, if in location
示例:
# 向响应客户端报文首部添加服务器地址;
add_header X-Via $server_addr;
# 如果代理服务器配置的缓存,向客户端展示缓存命中与否
add_header X-Cache $upstream_cache_status;
2、expires指令
用于添加Expires及Cache-Control首部或修改首部的值;
配置格式:
Syntax: expires [modified] time;
expires epoch | max | off;
Default: expires off;
Context: http, server, location, if in location
3、ngx_http_upstream_module模块
将多个后端主机定义为服务器组,而后可由proxy_pass,fastcgi_pass,memcached_pass等调用;
1、upstream指令
定义后端服务器组,引入新的上下文,只能用在http上下文;
配置格式:
Syntax: upstream name { ... }
Default: —
Context: http
name:名称,直接字符串;
2、server指令
Syntax: server address [parameters];
Default: —
Context: upstream
IP[:port]
HOSTNAME[:port]
unix://PATH/TO/SOME_SOCK_FILE
参数:
weight=number:服务器主机权重;
max_fails=number:最大失败尝试次数;
fail_timeout=time:设置服务器被识别为不可用的超时时长;
backup:标记为备用主机,只有当所有server不可用时才使用;
down:手动标记其不在处理任何用户请求,可实现代码灰度发布。
3、ip_hash指令
Syntax: ip_hash;
Default: —
Context: upstream
4、least-conn指令
最少连接调度算法;
配置格式:
Syntax: least_conn;
Default: —
Context: upstream
This directive appeared in versions 1.3.1 and 1.2.2.
5、keepalive指令
指明多少个连接使用keepalive;通常后端有多少台主机就给多少;
配置格式:
Syntax: keepalive connections;
Default: —
Context: upstream
This directive appeared in version 1.1.4.
示例:
keepalive 4;
以上是关于Nginx系列之反向代理相关模块的主要内容,如果未能解决你的问题,请参考以下文章
Nginx:--反向代理之(负载均衡-upstream模块)