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

NGINX反向代理与链接的Docker容器失败

我有以下docker-compose.yml :

node1: build: ./node links: - redis ports: - "8080" node2: build: ./node links: - redis ports: - "8080" service1: build: ./service links: - redis ports: - "8383" redis: image: redis ports: - "6379" Nginx: build: ./Nginx links: - node1:node1 - node2:node2 - service1:service1 ports: - "80:80"

执行这个并运行docker ps我得到以下内容

080d9d7dc2e0 dockerworkflow_Nginx:latest "Nginx -g 'daemon of 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp,443/tcp dockerworkflow_Nginx_1 8c25bfdb9d00 dockerworkflow_node1:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33023->8080/tcp dockerworkflow_node1_1 4ae817be2a63 dockerworkflow_service1:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33022->8383/tcp dockerworkflow_service1_1 91ff238fe3f6 dockerworkflow_node2:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33021->8080/tcp dockerworkflow_node2_1 fe0c7e02c860 redis:latest "/entrypoint.sh redi 6 minutes ago Up 6 minutes 0.0.0.0:33020->6379/tcp dockerworkflow_redis_1

一切似乎都很好。

我使用的Nginx.conf如下所示:

Nginx – 在不同端口上反向代理多个API

对于在Node.JS上运行的SaaS,是否需要作为反向代理的Web服务器(Nginx)或清漆?

反向代理Elasticsearch传输端口

使用Nginx作为节点应用程序的反向代理的子域问题

如何使用ProxyPass通过Express提供静态文件

worker_processes 4; events { worker_connections 1024; } http { server { listen 80; location / { proxy_pass http://node1; } location /a/ { proxy_pass http://node2; } location /b/ { proxy_pass http://service1; } } }

所有这些应该真正做的是以下几点:

如果我inputhttp://{host-ip}/那么node1容器被转发请求。

如果我inputhttp://{host-ip}/a/则node2容器被转发请求。

如果我inputhttp://{host-ip}/b/则service1容器被转发请求。

现在,如果我尝试了任何东西,我会得到502 Bad Gateway 。

如何直接使用Nginx服务所有现有的静态文件,但将其余的代理代理到后端服务器。

部署本地Nginx服务器到公共ubuntu 16.04

CherryPy后面的Nginx反向代理POST请求被破坏/截断

keycloak apache服务器configuration与“混合内容”的问题

避免Nginx解码proxy_pass上的查询参数(相当于AllowEncodedSlashes NoDecode)

我能够找出解决方案,结果是愚蠢的,没有出现在任何日志,我很难遇到。

以下是更新的Nginx.conf文件

worker_processes 4; events { worker_connections 1024; } http { upstream node_app { server node1:8080; } upstream service_app { server service1:8383; } server { listen 80; location / { proxy_pass http://node_app/; include /etc/Nginx/proxy_params; } location /a/ { proxy_pass http://node_app/; include /etc/Nginx/proxy_params; } location /b/ { proxy_pass http://service_app/; include /etc/Nginx/proxy_params; } } }

不知道在这一点上include是否是必要的,但是proxy_pass指令的尾部/末尾似乎在一天结束的时候会有所作为。

我认为你应该指定每个proxy_pass内的端口。

worker_processes 4; events { worker_connections 1024; } http { server { listen 80; location / { proxy_pass http://node1:8080; } location /a/ { proxy_pass http://node2:8080; } location /b/ { proxy_pass http://service1:8383; } } }

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

相关推荐