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
.
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;
}
}
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;
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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…