Nginx docker代理容器没有重定向?

问题描述 投票:-1回答:2

我正在尝试将以下Nginx反向代理配置烘焙到docker镜像中:

    server {
        listen 80;
        server_name 203.0.113.2;

        proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

        location / {
            proxy_pass http://203.0.113.1:3000;
        }
    }

我现在只是将它放入一个卷并映射它如下:

-v nginx-data:/etc/nginx/conf.d/

这是有效的,它启动时容器作为反向代理执行,但当我像这样烘烤它:

Dockerfile

  FROM nginx
  COPY gogs.conf /etc/nginx/conf.d/gogs.conf

从图像启动容器,如下所示:

docker run --name gogs-nginx-container -d gogs-nginx

最后在其指定的IP地址访问它http://172.17.0.3/我只是得到“欢迎来到Nginx”页面,而不是看到它并没有重定向到203.0.113.1:3000

当运行docker logs gogs-nginx-container时,它只告诉我我尝试连接响应代码,即304s。我在运行vanilla nginx图像时将配置复制到我安装它的相同位置,所以它应该工作...

有关如何排除故障的任何想法?

bash shell docker nginx dockerfile
2个回答
1
投票

在你的server_name街区的server203.0.113.2,你正试图访问172.17.0.3。显然,它们不匹配,Nginx正在使用另一个server块(可能是default)来满足请求。

如果你能够坚持使用特定的IP,那么在server_name中拥有IP可能就行了,它可以用于某些测试目的。

对于真实的网站,server_name应该包含您的网站所在的域名。例如,

server_name 203.0.113.2 gogs.local gogs.com;

然后你应该利用DNS来建立域名和IP之间的关系。在最简单的形式,您的计算机上的hosts文件可能为gogs.local提供IP。


0
投票

Nginx对其运行的IP地址“敏感”。在我的配置中,我有server_name 203.0.113.2;设置,因此容器启动时必须在该IP地址上启动,否则代理配置将不会触发。所以这个命令做了诀窍:

docker run --name gogs-nginx-proxy --net mk1net --ip 203.0.113.2 -d gogs-nginx
© www.soinside.com 2019 - 2024. All rights reserved.