Nginx reverse proxy in Docker-Container in Docker-Compose 502 Bad Gateway error

t1qtbnec  于 2023-10-16  发布在  Docker
关注(0)|答案(1)|浏览(139)

我正在尝试使用nginx反向代理作为服务之一启动docker-compose.yml。代理应该将端口80上的请求转发到数据库容器:8080。
我尝试使用 localhost:80800.0.0.0:8080 作为proxy_pass值,但没有成功。容器在同一网络中运行。
最后,在我最后一次编写之后,我检查了数据库的容器IP地址,然后将该地址插入到nginx的proxy_pass中,如下所示:

  1. http {
  2. server {
  3. listen 80;
  4. location / {
  5. proxy_pass http://192.168.48.2:8080;
  6. proxy_set_header Host $host;
  7. proxy_set_header X-Real-IP $remote_addr;
  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. proxy_set_header X-Forwarded-Host $server_name;
  10. }
  11. }
  12. }

然后在nginx容器中执行:nginx -s reload
可悲的是,我仍然得到一个 *502坏网关 * 当我访问localhost:80。localhost:8080将我带到WordPress设置页面。

很高兴知道这里发生了什么!

这里有完整的文档:docker-compose.yml,nginx容器的Dockerfile和我的原始nginx.conf

docker-compose.yml

  1. version: "3"
  2. services:
  3. reverse_proxy:
  4. container_name: reverse_proxy
  5. build: ./reverseproxy
  6. restart: always
  7. ports:
  8. - 80:80
  9. db:
  10. container_name: database
  11. image: mysql:5.7
  12. volumes:
  13. - db_data:/var/lib/mysql
  14. environment:
  15. MYSQL_ROOT_PASSWORD: cool-password
  16. MYSQL_DATABASE: wordpress
  17. MYSQL_USER: user
  18. MYSQL_PASSWORD: user-wordpress
  19. wordpress:
  20. container_name: wordpress
  21. depends_on:
  22. - db
  23. image: wordpress:latest
  24. ports:
  25. - "8080:80"
  26. environment:
  27. WORDPRESS_DB_HOST: db
  28. WORDPRESS_DB_USER: user
  29. WORDPRESS_DB_PASSWORD: user-wordpress
  30. WORDPRESS_DB_NAME: wordpress
  31. volumes:
  32. db_data:
  33. networks:
  34. default:
  35. name: revprox

Dockerfile

  1. FROM nginx:mainline-alpine
  2. RUN rm /etc/nginx/conf.d/default.conf
  3. RUN rm /etc/nginx/nginx.conf
  4. COPY nginx.conf /etc/nginx/nginx.conf
  5. VOLUME ["something/docker/wordpress-reverse-proxy/reverseproxy/logs", "/var/log/nginx"]
  6. # RUN nginx -c /etc/nginx/nginx.conf
  7. # RUN nginx -s reload
  8. # CMD ["nginx", "-s", "reload"]

nginx.conf

  1. worker_processes 1;
  2. events { worker_connections 1024; }
  3. http {
  4. server {
  5. listen 80;
  6. location / {
  7. proxy_pass http://0.0.0.0:8080;
  8. proxy_set_header Host $host;
  9. proxy_set_header X-Real-IP $remote_addr;
  10. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  11. proxy_set_header X-Forwarded-Host $server_name;
  12. }
  13. }
  14. }
2q5ifsrm

2q5ifsrm1#

解决方案是添加destination-container-name:port作为proxy_pass值。所以在这个例子中http://wordpress:80;
此外,我需要通过一个私人标签打开网站,因为浏览器保存的信息,并没有正确刷新。

相关问题