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