1. 闲不住的人首页
  2. 网站服务

Nginx反向代理相关模块

1. ngx_http_proxy_module 模块

主要提供反向代理及缓存功能;

1.1 1、proxy_pass 指令

该指令用来设置被代理服务器的地址,可以是主机名称,IP地址加端口号等形式。
配置格式:

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.xbzdr.com/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 后面一定不能加斜线”/”

1.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;

1.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;

1.4 proxy_cache 指令

调用缓存,默认为 off;

注意:当后端存在多个虚拟主机时必须为每个虚拟主机单独使用一个缓存。

配置格式:

Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location

示例:

proxy_cache pcache;

1.5 proxy_cache_key 指令

定义缓存键;

配置格式:

Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location

1.6 proxy_cache_valid 指令

为不同的响应码设置不同的缓存时长;

配置格式:

Syntax: proxy_cache_valid  time;
Default: —
Context: http, server, location

示例:

proxy_cache_valid 200 301 302 10m;
proxy_cache_valid 404 1m;

1.7 proxy_read_timeout 指令

等待后端服务器发送响应报文的超时时长,默认为 60 秒。当后端服务器特别繁忙,请求处理不过来超出此处设置的时长时 Nginx 反向代理就会返回给用户 502 的错误;

配置格式:

Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location

1.8 proxy_connect_timeout 指令

与后端服务器建立连接的超时时长;默认为 60 秒;最长为 70 秒;

配置格式:

Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location

1.9 proxy_send_timeout 指令

向后端服务器发送请求报文的超时时长;默认 60 秒。

配置格式:

Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

2. ngx_http_headers_module 模块

用于在响应给客户端报文中添加首部;

2.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.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 等调用;

3.1 upstream指令

定义后端服务器组,引入新的上下文,只能用在 http 上下文;
配置格式:

Syntax: upstream name { ... }
Default: —
Context: http
name:名称,直接字符串;

3.2 server 指令

定义服务器的地址和相关的参数;只能用于 upstream 上下文;

配置格式:

Syntax: server address [parameters];
Default: —
Context: upstream

地址(address)的格式:

IP[:port]
HOSTNAME[:port]
unix://PATH/TO/SOME_SOCK_FILE

参数:

weight=number:服务器主机权重;
max_fails=number:最大失败尝试次数;
fail_timeout=time:设置服务器被识别为不可用的超时时长;
backup:标记为备用主机,只有当所有server不可用时才使用;
down:手动标记其不在处理任何用户请求,可实现代码灰度发布。

3.3 ip_hash 指令

设置源地址哈希调度算法;

Syntax: ip_hash;
Default: —
Context: upstream

3.4 least-conn 指令

最少连接调度算法;

配置格式:

Syntax: least_conn;
Default: —
Context: upstream
This directive appeared in versions 1.3.1 and 1.2.2.

3.5 keepalive 指令

指明多少个连接使用 keepalive;通常后端有多少台主机就给多少;

配置格式:

Syntax: keepalive connections;
Default: —
Context: upstream
This directive appeared in version 1.1.4.

示例:

keepalive 4;

3.6 upstream 模块完整示例

upstream tomcat_svr {
  server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
  server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}

如果觉得文章不错,不妨给个『打赏』写作不易,各位的支持,能激发和鼓励我更大的写作热情。谢谢

原创文章,作者:恩志,如若转载,请注明出处:https://www.xbzdr.com/455.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:510749025@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code