我正在寻找具有 tld 支持的多个 nginx 容器的最佳实践。请考虑以下 docker-compose 文件:
frontend:
build:
context: nginx/
hostname: frontend-docker
ports:
- "32777:80"
backend:
build:
context: nginx/
hostname: backend-docker
ports:
- "33777:80"
proxy:
image: nginx
hostname: proxy-docker
links:
- frontend
- backend
ports:
- "80:80"
说明 如您所见,我可以在 localhost:32777 和 localhost:33777 访问前端和后端,但是当我要访问 prod 时,我想访问 site.com 的前端和 backend.site.com 的后端。在那种情况下,
proxy
装有 server_name backend.site.com;
的容器和 server_name site.com
并创建到 http://frontend
的反向代理和 http://backend
我的问题 我应该摆脱代理容器并放入
server_name
直接参与 frontend
和 backend
容器,甚至构建一个名为 web
的容器持有backend and frontend
那里。一般来说,以这种方式拆分容器在配置、环境变量、构建不同的镜像等方面更合适。
最佳答案
寻址 frontend
和 backend
直接来自外部的容器很可能无法工作,因为您不能多次将端口 80 绑定(bind)到主机。
如果 frontend
和 backend
是不同的应用程序,您可能希望使用不同的 Dockerfile
构建它们的镜像s。
当我们在这里时,您可能想研究一个简单的负载平衡解决方案,如 https://traefik.io/作为容器的前端。
但对于您当前的用例来说,这可能有点过分了,您希望坚持使用上述配置。
关于docker - 多个 docker nginx 容器或单个 nginx docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690624/