nginx配置中proxy_set_header的不同字段

use*_*017 11 nginx node.js

我对 nginx 配置很陌生。我想使用它来设置虚拟主机,以便我可以在同一台服务器上的不同端口上运行不同的 Node JS 应用程序,但让它们在不同的子域中提供服务。经过一番搜索,我在 stackoverflow 上找到了一篇文章,它非常适合我想要做的事情。除其他外,代码涉及以下位置块

location / {                                                              ?
    proxy_set_header X-Real-IP $remote_addr;                              ?
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;          ?
    proxy_set_header Host $http_host;                                     ?
    proxy_set_header X-NginX-Proxy true;                                  ?
                                                                          ?
    proxy_pass http://otherapp/;                                          ?
    proxy_redirect off;                                                   ?
}
Run Code Online (Sandbox Code Playgroud)

现在我想了解脚本的作用。我查看了各种人发布的nginx文档和注释,并了解了一些事情。在我看来,即使我删除proxy_set_header了上面代码中的所有行 EXCEPT ,我想要的也可能会起作用proxy_pass。我想了解上面代码中的不同字段在做什么。可能它们对我目前没有意识到的一些事情很有用。有没有一个地方列出proxy_set_header模块的所有字段并解释它们?

谢谢你。

Sha*_*den 13

本质上,它正在做的是向它代理的服务器提供信息。为了:

  1. X-Real-IP- 您要代理的服务器会将 nginx 代理系统视为它正在执行的任何类型的应用程序逻辑或日志记录中的“客户端 IP”,因为 nginx 服务是 TCP 连接的来源。这通常毫无价值,尤其是在日志中。后端服务器可以使用此标头而不是其正常的客户端 IP 进行日志记录或其他需要客户端 IP 的用途。
  2. X-Forwarded-For- 这是一个标准的 ish 标头,类似于X-Real-IP,但为连接所通过的整个代理链提供了添加的连接源条目。由于可能有多个条目,因此从后端服务器解析和使用可能会更令人头疼。
  3. Host- 这是对您的应用程序最重要的一个。通常,nginx 向后端服务器发出的请求将在其Host标头中包含您配置的地址(在本例中为http://otherapp/)。如果代理到基于名称的虚拟主机,或者基于接收到的主机头生成链接的东西,这可能是不需要的。这个配置使得Host客户端发送 nginx的标头被发送到后端(相当于 Apache 的ProxyPreserveHost)。
  4. X-NginX-Proxy- 所有这些都是作为使用代理的标记。在大多数情况下可能没有用。