微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个在端口号3000运行的docker容器中的应用程序,暴露给主机(端口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

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

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中打开,这会给我一个503暂时不可用的服务错误.

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

解决方法:

在做了一些搜索之后,我能够把一个工作的docker-compose.yml放在一起,它有一个工作的Nginx反向代理(图像:docker hub中的jwilder / Nginx-proxy)到我在的一个基于node.js的web应用程序单独的容器.

使其发挥作用的关键是:

>在Nginx反向代理容器中设置VIRTUAL_HOST =端口,此端口应该是我的node.js应用程序在其容器中运行的端口(而不是在主机上映射的端口!)
>如果您希望Nginx反向代理位于https上,则应设置SSL证书,但应将http(而不是https)设置为Web应用程序容器中的环境变量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"

希望这有助于某天某人从搜索引擎登陆此页面

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐