Nginx:何时使用proxy_set_header Host $ host vs $ proxy_host

时间:2016-09-27 03:28:06

标签: nginx proxy reverse-proxy

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

由于

1 个答案:

答案 0 :(得分:15)

一般情况下,无需明确执行proxy_set_header Host proxy_host,因为它是默认值。如果您需要通过 other 调用服务器而不是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;

另一种情况可能是“基于名称”的虚拟主机,其中上游有一个有用的DNS名称,但您想通过其他名称来调用它。

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