【问题标题】:Issue with setting up Nginx with multiple Docker containers使用多个 Docker 容器设置 Nginx 的问题
【发布时间】:2017-12-29 13:14:41
【问题描述】:

目前我想设置一台服务器,它有一个 Docker WordPress 和 Nginx 作为前面的代理。我希望将来能够在这个 Nginx 代理后面拥有多个 WordPress、NodeJS、ROR 等。

当我尝试在端口 80 上连接到我的服务器时,我得到一个 403 禁止。

我能够构建 Docker WordPress 映像,并可以在远程 PC 上的端口 8080 上连接到它。

这是我的 Docker WordPress 的 compose.yml:

version: "3.1"
services:

  my_wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_HOST: my_mysql_wordpress

  my_mysql_wordpress:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password

这是我尝试构建 Nginx 容器时遇到 403 禁止的部分。

Nginx Docker 文件:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

Nginx compose.yml:

version: "2"
services:

  web:
    restart: always
    image: nginx
    ports:
      - "80:80"
    volumes:
      - /path/in/vm/www:/usr/share/nginx/html
    external_links:
      - mywordpress_wordpress_1:mywordpress

networks:
  default:
    external:
      name: mywordpress_default

Nginx nginx.conf:

http {

#...

upstream wordpress {
  server mywordpress:8080;
}

#...

server {
    listen 80;

    server_name 192.168.1.124 test.me;

    location / {
        proxy_pass http://wordpress/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}
}

现在对我来说,这似乎很可能与我的 nginx.conf 有关,因为我仍然能够在端口 8080 上连接到我的 WordPress 站点。正如我所说,我也能够连接到我的 Nginx代理,我在它启动时没有看到任何错误。

我正在尝试做的事情是否可能,或者我是否需要让 Nginx 应用程序位于操作系统上而不是在 docker 容器内?

【问题讨论】:

标签: wordpress nginx docker docker-compose


【解决方案1】:

如果我是对的,您想运行多个 wordpress docker 映像并使用 nginx 反向代理到 wordpress 实例。在那个用例中,nginx 应该位于您的操作系统上,而不是位于 docker 映像中。这样,nginx 将能够代理到您操作系统上与 wordpress 容器相关联的端口。

【讨论】:

    【解决方案2】:

    您将 Nginx 和 Wordpress 放在 2 个不同的撰写文件中。如果你在同一台机器上运行,那么

    external_links:
      - mywordpress_wordpress_1:mywordpress
    

    如果您在不同的机器上,上述方法将不起作用。还要检查docker ps,确保您使用的外部链接名称正确。

    同时检查你的 nginx 容器的日志,看看它是否显示任何错误。因为错误日志会给出一个关于为什么抛出 403 的指针,并且可能是由于您的配置方式,proxy_pass 无法连接到您的 wordpress 服务器。

    如果您在不同的机器上运行这些撰写文件,那么请使用 external_links 而不是 extra_hosts

    extra_hosts:
      - "mywordpress:<IP of the wordpress machine>"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 2014-07-18
      • 2018-07-28
      • 1970-01-01
      • 2019-08-17
      相关资源
      最近更新 更多