nginx 502访问Elastic Beanstalk上停靠的ASP.NET核心Web API时出现网关错误

cygmwpex  于 2022-11-02  发布在  Nginx
关注(0)|答案(2)|浏览(131)

我的docker-compose.override.yml如下:

version: '3.4'

services:
  helen.api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:5000
    ports:
      - "5001:443"
      - "5000:80"
    volumes:
      - ~/.aspnet/https:/root/.aspnet/https:ro
      - ~/.microsoft/usersecrets:/root/.microsoft/usersecrets:ro

停靠文件:


# See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyProjectWebAPI/MyProject.API.csproj", "MyProjectWebAPI/"]
COPY ["MyProject.Globals/MyProject.Globals.csproj", "MyProject.Globals/"]
RUN dotnet restore "MyProjectWebAPI/MyProject.API.csproj"
COPY . .
WORKDIR "/src/MyProjectWebAPI"
RUN dotnet build "MyProject.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyProject.API.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyProject.API.dll"]

Docker-compose.yml

version: "3.4"

services:
  helen.api:
    image: ${DOCKER_REGISTRY-}helenapi
    build:
      context: .
      dockerfile: HelenWebAPI/Dockerfile

当尝试访问停靠的ASP.NETWebAPI的任何URL时,我收到一个502错误网关错误:

vof42yt1

vof42yt11#

根据AWS文档,问题的原因可能是:
如果您使用Docker Compose管理Docker环境,Elastic Beanstalk会假设您将代理服务器作为容器运行。因此,Proxy server设置默认为None,并且Elastic Beanstalk不提供NGINX配置。

备注

即使您选择NGINX作为代理服务器,在使用Docker合成的环境中也会忽略此设置。代理服务器设置仍默认为None
请遵循建议,尝试在一个docker-compose文件中提供您自己的nginx容器和相应的配置。例如:

version: '3.4'

services:
  helen.api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:5000
    volumes:
      - ~/.aspnet/https:/root/.aspnet/https:ro
      - ~/.microsoft/usersecrets:/root/.microsoft/usersecrets:ro
  nginx:
    image: nginx:alpine
    volumes:
      - ~/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - helen.api
    ports:
      - "80:80"

MicrosoftAWS提供了有关nginx.conf文件外观的优秀指南:

server {
    listen        80;

    location / {
        proxy_pass         http://helen.api:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

请注意,我们将容器helen.api引用为被代理的服务器,并且我们将使用在ASPNETCORE_URLS设置中配置的端口5000

2fjabf4q

2fjabf4q2#

Elastic Beanstalk的代理默认在端口5000上转发流量。因此,您应该配置nginx将请求转发到该端口,您的应用在- 80上侦听,或者您应该让您的应用在端口5000上侦听。
您当前配置:
入站流量---〉80:- -------------------------------------------------------------------------------------------------------------------------您的容器
应为:
入站流量---〉80:- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------您的容器
或者更易于配置:
入站流量---〉80:ngnix:任意---5000 ---〉5000:您的容器
通过简单地更改容器的环境属性,可以更容易地更改后者。
我对. NET的理解是零,但请看这里:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-linux-platform-nginx.html

相关问题