使用多个Docker容器设置Nginx的问题

时间:2017-07-24 03:47:13

标签: wordpress nginx docker docker-compose

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

当我尝试在端口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 DockerFile:

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有关,因为我仍然能够连接到我的Word80在端口8080上的网站。我说我也能连接到我的Nginx代理,我发现它时没有看到任何错误。

我尝试做什么甚至可能,或者我是否需要将Nginx应用程序放在操作系统上,而不是在docker容器内?

2 个答案:

答案 0 :(得分: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>"

答案 1 :(得分:1)

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