繁体   English   中英

nginx反向代理上游在docker-compose中失败并显示连接被拒绝的消息

[英]nginx reverse proxy upstream fails in docker-compose with connection refused message

我有一个docker-compose.yaml似的docker-compose.yaml (为简单起见缩短):

# ...
services:
  my-ui:
    # ...
    ports:
    - 5402:8080
  networks:
  - my-net

networks:
  my-net:
    external:
      name: my-net

我正在尝试使用以下配置将nginx设置为反向代理:

upstream client {
  server my-ui:5402;
}

server {
  listen 80;

  location / {
    proxy_pass http://client;
  }
}

这是我用于nginx docker-compose.yaml

# ...
services:
  reverse-proxy:
    # ...
    ports:
    - 5500:80
    networks:
    - my-net

networks:
  my-net:
    external:
      name: my-net

现在发生的情况是,当我运行my-uireverse-proxy (每个都使用自己的docker-compose up ),然后转到http://localhost:5500 ,我收到一条Bad Gateway消息,并且我的nginx日志显示这个:

connect() failed (111: Connection refused) while connecting to 
upstream, client: 172.19.0.1, server: , request: "GET / HTTP/1.1", 
upstream: "http://172.19.0.5:5402/", host: "localhost:5500"

如果我exec到我的nginx容器并使用ping

ping my-ui
ping 172.19.0.5

两者都成功,但如果我想,例如, curl

curl -L http://my-ui
curl -L http://my-ui:5402
curl -L http://172.19.0.1

所有这些都失败并显示connection refused消息。 我在这里缺少什么?

PS:我不确定,但补充一下my-ui是一个基本的vuejs应用程序,在 Webpack 开发服务器上运行可能会很有用。

PS2:我也尝试过传递主机头等,但结果相同

容器的名称 ( my-ui ) 解析为容器的 IP。 因此,您必须在上游提供容器的端口,而不是您映射到主机的端口。

upstream client {
  server my-ui:8080;
}

server {
  listen 80;

  location / {
    proxy_pass http://client;
  }
}

您还可以使用主机名称配置上游并使用映射端口。 server <name of host>:5402 )但这可能会变得非常混乱,并且您将失去使用 docker 网络隔离服务的优势。

此外,您还可以删除端口映射,除非您需要在没有反向代理的情况下访问 Web 服务:

# ...
services:
  reverse-proxy:
    # ...
    # ports:
    # - 5500:80

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM