Nginx:何时使用proxy_set_header主机$ host与$ proxy_host [英] Nginx: when to use proxy_set_header Host $host vs $proxy_host
问题描述
我一直在阅读反向代理,并且想知道proxy_set_header Host $host
是否适合proxy_set_header Host $proxy_host
.我做了一些研究,并在此文章中说,在大多数情况下,我们将Host设置为$ host.那么,为什么nginx默认为$ proxy_host?为了帮助我更具体地理解,请配置反向代理
I've been reading up on reverse proxying and am wondering when proxy_set_header Host $host
is appropriate over proxy_set_header Host $proxy_host
. I did some research and in this article it says that in most cases we set Host to $host. Then why does nginx default to $proxy_host? To help me understand more concretely, will the reverse proxy configuration here (bottom of article) still work if we use $proxy_host instead?
谢谢
推荐答案
通常,无需显式执行proxy_set_header Host proxy_host
,因为它是默认设置.如果您需要使用除proxy_pass
指令之外的其他 调用服务器,则需要通过proxy_set_header something
进行覆盖.
In general there is no need to explicitly do proxy_set_header Host proxy_host
because it's the default. If you need to call a server by something other than what is in the proxy_pass
directive, then you will need to override via proxy_set_header something
.
如果您要像server_name
指令中一样代理相同主机,那么您将有机会使用proxy_set_header $host
.如果实际的应用程序可能托管在另一个端口或某个内部服务器上,通常会是这种情况.
If you want to proxy the same host as was in your server_name
directive, then you would have occasion to use proxy_set_header $host
. This would commonly be the case if perhaps the actual application is hosted on another port or on some internal server.
server {
listen 80;
server_name site.example.com;
location / {
proxy_set_header Host $host;
proxy_pass http://localhost:8080;
}
}
如果您要呼叫上游的名称不是其实际的DNS名称,那么您可能会有类似的内容:
If the name you are calling the upstream is not its actual DNS name, then you might have something like:
# 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名称,但是您想用另一个名称来调用它.
Another case might be for "name-based" virtual hosting where there is a useful DNS name for the upstream, but you would like to call it by another name.
proxy_pass http://origin.example.com;
proxy_set_header Host site.example.com
这篇关于Nginx:何时使用proxy_set_header主机$ host与$ proxy_host的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!