nginx 配置中 proxy_set_header 的不同字段

nginx 配置中 proxy_set_header 的不同字段

我对 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;                                                   │
}

现在我想了解脚本的作用。我查看了 nginx 文档和不同人发布的说明,并了解了一些内容。在我看来,即使我删除proxy_set_header上述代码中的所有行 EXCEPT ,我想要的功能也可能有效proxy_pass。我想了解上述代码中不同字段的作用。可能它们对一些我目前没有意识到的事情很有用。有没有地方列出proxy_set_header模块的所有字段并对其进行解释?

谢谢。

答案1

本质上,它所做的就是向其代理的服务器提供信息。顺序如下:

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

相关内容