回答问题
我在docker容器中有一个应用程序在端口号3000
上运行,暴露给主机(端口3050映射到容器的端口3000),我想使用这个nginx-proxy来指向像http://localhost/users
这样的url /proxy 到http://localhost:3050/users
。
我的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
下面是在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 反向代理帮助或纠正我吗?
Answers
在进行了一些搜索之后,我能够将一个工作正常的docker-compose.yml
汇集到我在单独的容器。
使其工作的关键如下:
1.在nginx反向代理容器中设置VIRTUAL_HOST=port
,这个port
应该是我的node.js应用在其容器中运行的端口(不是映射到主机上的端口!)
2.如果你想让nginx反向代理在https
上,你应该设置一个SSL证书,但是应该将http
(不是https)设置为web app容器中的环境变量VIRTUAL_PROTO=http
。
**下面是工作的 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"
希望有一天这会帮助某人从搜索引擎登陆此页面!
原文链接:https://devpress.csdn.net/cloud/62ff9098c677032930805a9f.html