使用 dockerized nginx 进行反向代理

使用 dockerized nginx 进行反向代理

[转帖自堆栈溢出因为我认为服务器配置可能是问题所在]

我正在使用 Docker 构建一个多容器应用程序。完整环境在 github 上如果你想重新创建它,但为了方便起见,我在下面包含了我认为相关的部分。我的 nginx Dockerfile 如下:

FROM ubuntu:14.04
MAINTAINER Garry Cairns
ENV REFRESHED_AT 2015-02-11

# get the nginx package and set it up
RUN ["apt-get", "update"]
RUN ["apt-get", "-y", "install", "nginx"]

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443

# load nginx conf
ADD ./site.conf /etc/nginx/sites-available/correspondence
RUN ["ln", "-s", "/etc/nginx/sites-available/correspondence", "/etc/nginx/sites-enabled/correspondence"]

CMD ["nginx", "-g", "daemon off;"]

添加到 sites-enabled 的 site.conf 文件如下所示:

# see http://serverfault.com/questions/577370/how-can-i-use-environment-variables-in-nginx-conf#comment730384_577370
upstream api {
    server api_1:8000;
}

server {
    location / {
        proxy_pass       http://api;
    }
}

那里的 nginx 配置看起来与这个答案我觉得这个方法应该没问题。但是当我在生产环境中访问我的机器或域上的 localhost(无端口)时,我只会看到 nginx 欢迎页面,没有进行任何转发。

我可以连接到正在运行的 nginx 容器,并使用 wget 从应用程序容器中获取正确的结果,http://api_1:8000因此我很确定问题出在我的 nginx 设置中,而不是我的 Docker 设置中,但我无法解决这个问题。以前有其他人解决过这个问题吗?

答案1

终于搞清楚了。我需要删除使用 nginx 安装的默认启用站点。我的 Dockerfile 现在显示:

FROM ubuntu:14.04
MAINTAINER Garry Cairns
ENV REFRESHED_AT 2015-02-11

# get the nginx package and set it up
RUN ["apt-get", "update"]
RUN ["apt-get", "-y", "install", "nginx"]

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443

# load nginx conf
ADD ./site.conf /etc/nginx/sites-available/correspondence
RUN ["ln", "-s", "/etc/nginx/sites-available/correspondence", "/etc/nginx/sites-enabled/correspondence"]
RUN ["rm", "-rf", "/etc/nginx/sites-available/default"]
CMD ["nginx", "-g", "daemon off;"]

世间万物皆安好。

相关内容