用多个Docker容器设置Nginx问题

目前我想设置一个服务器,它有一个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做,因为我仍然能够连接到我的WordPress网站的端口8080.以及我声明,我也能够连接到我的Nginx代理和我启动时没有看到任何错误。

我试图做什么甚至可能或者我需要Nginx应用程序坐在操作系统上,而不是在码头集装箱内?

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

 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>" 

如果我是正确的,你想运行多个WordPress的码头图像,并使用Nginx的反向代理到WordPress的实例。 在这个用例中,nginx应该在你的操作系统上,而不是在docker镜像里。 这样,nginx将有能力代理到您的操作系统上的端口与WordPress的容器绑定。