Azure 应用服务多容器(预览)NGINX connect() 失败 (111 : Connection refused) issue

标签 azure docker nginx docker-compose azure-appservice

我的 nginx.conf 在本地按预期工作,没有错误,但是当移动到此应用服务环境时,我收到下面概述的错误。

我正在使用 Azure App Service multi-container (preview) app in Web App for Containers 开发一个基于 TypeScript 构建的 React 应用程序,但在使用 NGINX 时遇到了一些问题。当我尝试运行应用服务时,我收到的主要错误是一些错误日志:

  • “connect() 失败(111:连接被拒绝)”
  • “连接到上游时没有实时上游”

应用服务 > 设置 > 配置 下的我的 WEBSITES_PORT 设置为 80。我还尝试将其设置为80:80。在这两种情况下,我都会得到下面相同的错误日志。将 WEBSITES_PORT 设置为 3001 并从容器设置文件中的服务列表中删除 nginx 会导致应用服务部署成功。

除了以下文件之外,如果我还可以提供其他文件,请告诉我。

我的容器设置在应用服务 > 设置 > 容器设置下找到,指向存储我的所有应用程序镜像的私有(private) Azure 容器注册表。该结构与我用于本地部署的 docker compose 文件非常相似。

version: '3.3'
services:
 mysite:
  image: "reactapp.azurecr.io/my_site_img"
  ports:
  - "3001:3001"
 nginx:
  image: "reactapp.azurecr.io/nginx"
  ports:
  - "80:80"

一个nginx.conf,用于控制我的 nginx 镜像中的路由。

upstream my_site_proxy {
  server localhost:3001;
}
server {
  listen       0.0.0.0:80;
  server_name  localhost;
  location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://my_site_proxy/;
      proxy_redirect off;
  }
}

当我尝试使用上述配置运行 Azure 应用服务时生成的错误日志文件。

2020-07-13T01:22:52.929149550Z 2020/07/13 01:22:52 [error] 27#27: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.16.7.1, server: localhost, request: "GET /robots1234.txt HTTP/1.1", upstream: "http://127.0.0.1:3001/robots1234.txt", host: "127.0.0.1:4548"
2020-07-13T01:22:52.929653182Z 2020/07/13 01:22:52 [warn] 27#27: *1 upstream server temporarily disabled while connecting to upstream, client: 172.16.7.1, server: localhost, request: "GET /robots1234.txt HTTP/1.1", upstream: "http://127.0.0.1:3001/robots1234.txt", host: "127.0.0.1:4548"
2020-07-13T01:22:52.930048306Z 2020/07/13 01:22:52 [error] 27#27: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.16.7.1, server: localhost, request: "GET /robots1234.txt HTTP/1.1", upstream: "http://127.0.0.1:3001/robots1234.txt", host: "127.0.0.1:4548"
2020-07-13T01:22:52.930060507Z 2020/07/13 01:22:52 [warn] 27#27: *1 upstream server temporarily disabled while connecting to upstream, client: 172.16.7.1, server: localhost, request: "GET /robots1234.txt HTTP/1.1", upstream: "http://127.0.0.1:3001/robots1234.txt", host: "127.0.0.1:4548"
2020-07-13T01:22:52.936363702Z 172.16.7.1 - - [13/Jul/2020:01:22:52 +0000] "GET /robots1234.txt HTTP/1.1" 502 157 "-" "-" "-"
2020-07-13T01:22:53.004840493Z 2020/07/13 01:22:53 [error] 27#27: *1 no live upstreams while connecting to upstream, client: 172.16.7.1, server: localhost, request: "GET /robots933456.txt HTTP/1.1", upstream: "http://my_site_proxy /robots933456.txt", host: "127.0.0.1:4548"
2020-07-13T01:22:53.005790052Z 172.16.7.1 - - [13/Jul/2020:01:22:53 +0000] "GET /robots933456.txt HTTP/1.1" 502 157 "-" "-" "-"
2020-07-13T01:22:53.024544427Z 2020/07/13 01:22:53 [error] 27#27: *4 no live upstreams while connecting to upstream, client: 172.16.7.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://my_site_proxy /", host: "mysite.azurewebsites.net", referrer: "https://portal.azure.com/"
2020-07-13T01:22:53.025501687Z 172.16.7.1 - - [13/Jul/2020:01:22:53 +0000] "GET / HTTP/1.1" 502 559 "https://portal.azure.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" "198.8.81.196:62138"
2020-07-13T01:22:53.152345935Z 2020/07/13 01:22:53 [error] 27#27: *5 no live upstreams while connecting to upstream, client: 172.16.7.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "http://my_site_proxy /favicon.ico", host: "mysite.azurewebsites.net", referrer: "https://mysite.azurewebsites.net/"
2020-07-13T01:22:53.153395901Z 172.16.7.1 - - [13/Jul/2020:01:22:53 +0000] "GET /favicon.ico HTTP/1.1" 502 559 "https://mysite.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" "198.8.81.196:62138"

最佳答案

您需要将 nginx 上游配置更改为:

upstream my_site_proxy {
  server mysite:3001;
}

您应该连接到 mysite,这是您的应用容器的名称。 Docker 会将此 DNS 名称解析为应用程序容器的 IP 地址。如果您在同一容器内运行 nginx 和您的应用程序,则只能连接到 localhost(这不是最佳实践。)

关于Azure 应用服务多容器(预览)NGINX connect() 失败 (111 : Connection refused) issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62963431/

相关文章:

node.js - 如何在 Mac 中使用命令行工具在 Windows Azure 云服务上部署 NodeJ

自定义脚本失败的 Azure ARM

Azure Blob 触发器。在配置文件中配置 Blob 路径

plugins - 了解Docker插件

azure - "Error": "401 - No API Key entered or API key incorrect." on each HTTP Azure function

linux - Docker-Compose:服务 xxx 依赖于未定义的服务 xxx

docker - nvidia/cuda 镜像中的 NVidia 驱动程序库

ruby-on-rails - Foreman无法启动Nginx,但我可以手动启动。为什么?

caching - 如何配置 NginX 仅在后端关闭时才提供缓存内容(5xx 响应代码)?

nginx.conf 忽略了 nginx-ingress 配置映射片段