Ton*_*yGW 3 reverse-proxy nginx docker docker-compose
我有一个在端口号运行的docker容器中的应用程序3000,暴露给主机(端口3050映射到容器的端口3000),我想使用这个nginx-proxy指向类似于http://localhost/users指向/代理的URL 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
Run Code Online (Sandbox Code Playgroud)
下面是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"
Run Code Online (Sandbox Code Playgroud)
在我启动docker容器之后,我可以http://localhost:3050/users在浏览器中打开,但不是http://localhost/users,这给了我一个503错误,服务暂时不可用.
也许我把整个想法弄错了,有人可以用nginx反向代理帮助或纠正我吗?
在做了一些搜索之后,我能够将一个docker-compose.yml有工作的nginx反向代理(图片:docker hub中的jwilder/nginx-proxy)的工作集合到一个单独的容器中的基于node.js的web应用程序中.
使其发挥作用的关键是:
VIRTUAL_HOST=port在nginx反向代理容器中,这port应该是我的node.js应用程序在其容器中运行的端口(而不是映射在主机上的端口!)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"
Run Code Online (Sandbox Code Playgroud)
希望这有助于某天某人从搜索引擎登陆此页面!
| 归档时间: |
|
| 查看次数: |
4819 次 |
| 最近记录: |