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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx docker代理容器没有重定向?相关的知识,希望对你有一定的参考价值。

我正在尝试将以下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图像时将配置复制到我安装它的相同位置,所以它应该工作...

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

答案

在你的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。

另一答案

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

以上是关于Nginx docker代理容器没有重定向?的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 Nginx 反向代理启用 Docker 端口访问

Dockerized Nginx将不同的子域重定向到同一页面

如何在 nginx docker elastic beanstalk中将http重定向到https

Plesk:如何将域端口 80 和 443 重定向到我的 Docker 容器?

Nginx 确实重定向,而不是代理

自定义docker nginx镜像无容器日志输出