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

回答问题

我在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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享