gpt4 book ai didi

nginx - 将 nginx 反向代理设置为从另一个 docker 容器提供服务

转载 作者:行者123 更新时间:2023-12-04 18:20:12 27 4
gpt4 key购买 nike

我在 docker 容器中有一个应用程序在端口号 3000 上运行,暴露给主机(端口 3050 映射到容器的端口 3000),我想使用这个 nginx-proxy将诸如 http://localhost/users 之类的 URL 指向/代理到 http://localhost:3050/users

我的 docker-compose.yml 文件中有这个 block :

 nginx_service:
image: jwilder/nginx-proxy
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./ssl_certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro

下面是 docker-compose.yml 中定义的容器,它在 docker 容器的 3000 端口上运行我的应用程序:

api:
build: .
container_name: api
environment:
- VIRTUAL_HOST= service.myserver.com
- VIRTUAL_PROTO=https
volumes:
- "./API:/host"
links:
- Mongo:Mongo
ports:
- "3050:3000"

启动docker容器后,我可以在浏览器中打开http://localhost:3050/users,但不能打开http://localhost/users,这给了我 Service Temporarily Unavailable 的 503 错误。

也许我的整个想法都错了,有人可以用 nginx 反向代理帮助或纠正我吗?

最佳答案

在进行了一些搜索之后,我能够整理出一个有效的 docker-compose.yml有一个工作的 nginx 反向代理(image: jwilder/nginx-proxy in docker hub)到我在一个单独容器中的基于 node.js 的 Web 应用程序。

使其发挥作用的关键如下:

  1. 设置VIRTUAL_HOST=port在 nginx 反向代理容器中,这个 port应该是我的 node.js 应用程序在其容器中运行的端口(不是映射到主机上的端口!)
  2. 如果你想让 nginx 反向代理在 https ,您应该设置一个 SSL 证书,但应该设置 http (不是 https)到环境变量 VIRTUAL_PROTO=http在 Web 应用程序容器中。

下面是工作中的 docker-compose.yml:

nginx_service:
image: jwilder/nginx-proxy
container_name: nginx_server
ports:
- "80:80"
- "443:443"
volumes:
- ./ssl_certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
- VIRTUAL_PORT=3000 # 3050 port on host does not work!


api:
build: .
container_name: api
environment:
- VIRTUAL_HOST=service.myserver.com
- VIRTUAL_PROTO=http # should be http even if you use https to the proxy, because node.js uses http!
volumes:
- "./API:/host"
links:
- Mongo:Mongo
ports:
- "3050:3000"

希望有一天这会帮助某人从搜索引擎登陆此页面!

关于nginx - 将 nginx 反向代理设置为从另一个 docker 容器提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com