nginx反向代理工作方式

nginx 设置请求post nginx配置请求方式_linux

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为出错就直接转发