nginx proxy_pass 代理 nginx 之 proxy_host-host-http_host

创建日期: 2022-10-31 18:14 | 作者: 风波 | 浏览次数: 10 | 分类: Nginx

来自:https://blog.51cto.com/gyj110/2079981

nginx 的 $proxy_host、$host、$http_host区别

例如 nginx 配置如下:

upstream web {
    server abc.com;
}

server {
    listen       80;
    server_name   www.hehe.com;

    location /front {
        proxy_pass http://web;
        proxy_set_header Host $proxy_host;
    }
}

nginx 设置 upstream 的规则

当匹配到 /front 时,使用web处理,到 upstream 就匹配到abc.com,这里直接转换成IP进行转发。 假如abc.com是在另一台nginx下配置的,ip为 10.10.10.10,则 $proxy_host 则对应为10.10.10.10。 此时相当于设置了Host为10.10.10.10。如果想让Host是abc.com,则进行如下设置:

proxy_set_header Host abc.com;

如果不想改变请求头“Host”的值,可以这样来设置:

proxy_set_header Host  $http_host;

但是,如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。 这种情况下,更好的方式是使用$host变量——它的值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名:

proxy_set_header Host  $host;

此外,服务器名可以和后端服务器的端口一起传送:

proxy_set_header Host   $host:$proxy_port;

如果某个请求头的值为空,那么这个请求头将不会传送给后端服务器:

 proxy_set_header Accept-Encoding "";
10 浏览
0 评论