Nginx:什么时候使用proxy_set_header Host $ Host vs $proxy_host



我一直在阅读反向代理,我想知道proxy_set_header Host $host何时比proxy_set_header Host $proxy_host更合适。我做了一些研究,在本文中,它说,在大多数情况下,我们将Host设置为$ Host。那么为什么nginx默认为$proxy_host?为了帮助我更具体地理解,如果我们使用$proxy_host,这里的反向代理配置(文章底部)是否仍然有效?

谢谢

一般来说,没有必要显式地执行proxy_set_header Host $proxy_host,因为它是默认的。如果您需要通过而不是proxy_pass指令中的来调用服务器,那么您将需要通过proxy_set_header something重写。

如果您想代理相同的主机,就像您的server_name指令一样,那么您将有机会使用proxy_set_header $host。如果实际应用程序托管在另一个端口或某些内部服务器上,则通常会出现这种情况。

server {
    listen 80;
    server_name site.example.com;
    
    location / {
       proxy_set_header Host $host;
       proxy_pass http://localhost:8080;
    }
}

如果您调用的上游名称不是其实际的DNS名称,那么您可能会有这样的内容:

# 192.168.2.1 responds to site.example.com, but
# site.example.com doesn't actually resolve to 192.168.2.1
proxy_pass http://192.168.2.1;
proxy_set_header Host site.example.com;

另一种情况可能是"name-based"虚拟主机,其中有一个对上游有用的DNS名称,但您想用另一个名称调用它。

proxy_pass http://origin.example.com;
proxy_set_header Host site.example.com

$proxy_host是一个关于上游服务器的标签,所以nginx默认使用这个标签。

如果您想添加关于主机的其他标记(头),请使用$host

最新更新