NGINX反向代理不会将请求主机名转发到Docker容器

时间:2020-05-24 11:24:18

标签: docker nginx reverse-proxy hostname

问题:

我们已经设置了在端口3002上运行的docker容器,然后将端口3002配置为我的域/path/上的www.example.com。在3002端口容器上运行了一个快速的REST API,它输出req.hostname,当我从www.abc.com发出请求时,req.hostname的控制台值显示为是www.example.com而不是www.abc.com

Nginx Conf

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/__abc.crt;
    ssl_certificate_key /etc/ssl/abc.key;

    listen 80 default_server;
    listen [::]:80 default_server;
    location  / {
        proxy_pass http://localhost:3001/;
        proxy_set_header Host $host;
    }
    location /path/ {
        proxy_pass http://localhost:3002/;
        proxy_set_header Host $http_host;
    }
}

我必须进行哪些更改才能使www.abc.com成为控制台值?

1 个答案:

答案 0 :(得分:0)

Nginx的location块应排序,以使更具体的表达式排在首位

在您的示例中,您应该具有:

    location /path/ {
        proxy_pass http://localhost:3002/;
        proxy_set_header Host $http_host;
    }

    location  / {
        proxy_pass http://localhost:3001/;
        proxy_set_header Host $host;
    }

通过运行nginx -s reload或重新启动容器来确保您的更改生效