从零学nginx-配置反向代理

nginx反向代理工作方式

从零学nginx-配置反向代理

nginx作为方向代理服务器,其工作方式有两个点需要注意:

  1. 当转发请求的时候,nginx会接收完所有的请求数据,再去转发请求。
  2. 在响应的时候,nginx是一边接收响应数据,一边将响应数据返回给客户端的。

配置upstream

配置示例:

upstream testUrl{
    #ip_hash;
    server 服务器1  #weight=5  max_fails=3  fail_timeout=30s  down;
    server 服务器2;
}

首先我们需要定义一个上有服务,name为testUrl,这个upstream中包含以下属性:

属性名 作用描述 备注
ip_hash 负载均衡策略,如果不配置,默认为轮询 不能和weight一起使用
server 指定这个upstrem中包含哪些上游服务
weight 负载均衡策略为轮询时各服务的比重 不能和ip_hash一起使用
max_fails 在fail_timeout时间内,失败次数超过max_fails,则认为服务不可用 默认为1
fail_timeout 和max_fails一起使用 默认10s
down 下线服务器 和ip_hash一起使用

配置访问日志

我们可以在http模块中使用log_format定义一个log的格式:

log_format  format_name  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for" '
					     '$upstream_addr $upstream_cache_status';

这里其实就是拿nignx的一些变量来组装成日志的输出格式,除了nginx默认的日志内容,如果想要添加目标服务器的信息可以添加一下参数:

变量 含义
$upstream_addr 访问的上游服务器的地址
$upstream_cache_status 是否命中缓存
$upstream_status 上游服务器的响应状态
$upstream_response_time 上游服务器的响应时间

更多全量的参数建议去官方文档查看有哪些内置变量。
定义好log_format后,我们只需要在打开日志的时候指定format即可:

access_log  日志输出地址 format_name;

配置server模块

server{
    proxy_pass  http://testUrl;
    proxy_method  POST;
    proxy_pass_request_body on;
    proxy_next_upstream http_404;
}

下表是对server模块中的属性的作用的描述:

属性名 作用 备注
proxy_pass 将拦截到的请求转发到指定的上游服务 可以是一个具体的地址,也可以是upstram的name
proxy_method 将请求转发成指定的method 不管原始请求的method是什么,经过转发后到上游服务器的method为指定的这个
proxy_hide_header 指定哪些head字段不会被转发 默认不转发的有:Date、Server、X-Pad和X-Accel-*
proxy_pass_header 指定哪些head字段要转发
proxy_pass_request_body 是否向上游服务器发送body 默认是发送
proxy_next_upstream 当处理请求的上游服务器出现异常的时候,继续换一台服务器处理的策略 默认是当出现error和timeout的时候,语法为:proxy_next_upstream[error timeout invalid_header http_500 http_502 http_503 http_504 http_404 off]; off为出错就直接转发
上一篇:MITMProxy如何配置二次代理


下一篇:Nginx被动健康检查和主动健康检查