Nginx proxy_set_header参数设置

一、不设置 proxy_set_header Host

不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,参考
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

# cat ngx_header.conf 
server {
    listen 8090;
    server_name _;
    location / {
        proxy_pass http://172.31.5.0:5000;
    }
}

结果如下:返回proxy_pass 后面的值
在这里插入图片描述

二、设置proxy_set_header Host $host

server {
    listen 8090;
    server_name _;
    location / {
        proxy_set_header Host $host;
        proxy_pass http://172.31.5.0:5000;
    }
}

结果如下:不再是 proxy_pass代理的ip地址了, 不包含端口
在这里插入图片描述


三、设置proxy_set_header Host $http_host

server {
    listen 8090;
    server_name _;
    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://172.31.5.0:5000;
    }
}

结果如下:不再是 proxy_pass代理的ip地址了, 包含端口
在这里插入图片描述

提示: 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404