nginx proxy reqeust的行为
如果你希望 upstream 能合理地处理 request ,那仅仅传递 URI 是不够的。来自于 Nginx 的 request 和直接来源于客户端的 request 之间还是有区别的。这里最大的差异来自于 request 的 Headers(头信息)。
当 Nginx 代理一个 request ,它会自动对 Headers 做一些调整:
- Nginx 会去除任何空的 Headers。转发空值是没有意义的;它只会让 request 变得臃肿。
- Nginx 默认把名称包含下划线的 Headers 视为无效,直接移除。如果你希望让这类型的信息生效,那你要把 underscores_in_headers 指令设置成 on,否则这样的头信息将不会把他发送给后端服务器。
- Host 会被重写成由 $proxy_host 定义的值。它可以是由 proxy_pass 指令定义的 upstream 的 IP (或者名称)和端口。
- Headers 中的 Connection 改成 close。这个 Headers 用在两个服务器创建特定连接的信号信息。在这个实例中,Nginx 把它设置成 close,一旦原始 request 被响应,upstream 的这个连接将被关闭。upstream 不应该期望这个连接被持久化。