nginx中$host、$http_host、$proxy_host的区别
变量 是否显示端口 值
$host 不显示端口 浏览器请求的ip,不显示端口
$http_host 端口存在则显示 浏览器请求的ip和端口号
$proxy_host 默认80端口不显示,其它显示 被代理服务的ip和端口号
配置 nginx 代理服务后
不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值。
设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。
设置 proxy_set_header Host h o s t : host:host:proxy_port 时,浏览器直接访问 nginx,获取到的 Host 是 h o s t : host:host:proxy_port 的值。
设置 proxy_set_header Host $http_host 时,浏览器直接访问 nginx,获取到的 Host 包含浏览器请求的 IP 和端口。
设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404。