【问题标题】:Reverse proxying with dockerized nginx使用 dockerized nginx 进行反向代理
【发布时间】:2015-02-11 12:41:06
【问题描述】:

我正在使用 Docker 构建一个多容器应用程序。 full environment is on 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;"]

添加到启用站点的 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 配置似乎与 this answer 中的配置非常相似,我觉得这种方法应该没问题。但是当我在我的机器或生产域访问本地主机(无端口)时,我只看到 nginx 欢迎页面,没有进行转发。

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

【问题讨论】:

  • listen 80, 443; 是语法错误。 $API_PORT_8000_TCP_ADDR 定义在哪里?
  • @AlexeyTen 是的,我在调试时将其更改为 listen 80;,将相应地编辑问题。 Fig/Docker 在连接容器时会自动填充这些环境变量。
  • 嗯,nginx 不会在配置中使用这些变量,所以你的配置实际上是指空变量。你可以找到有用的这个问题serverfault.com/q/577370/211028
  • @AlexeyTen 谢谢,看起来很有希望。我应该想到服务器故障,但我认为 Docker 有点模糊了这些区别。如果我得到一个解决方案,我会在这里发布。

标签: 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;"]

世界上一切都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多