ASP.NET Ядро 3.1 с функцией входа в Google, обратным прокси-сервером nginx и временно недоступным ресурсом docker

#c# #docker #asp.net-core #nginx-reverse-proxy

Вопрос:

Я строю ASP.NET Основное веб-приложение 3.1, предназначенное для размещения на экземпляре AWS EC2.

Моя настройка выглядит следующим образом:

  • Экземпляр EC2 под управлением Debian 10
  • Обратный прокси Nginx
  • certbot для ssl-сертификата
  • Докер работает в режиме роя
  • ASP.NET Основное веб-приложение 3.1 (докер)
  • База данных SQL Server (docker)

Веб-приложение и база данных SQL Server выполняются в контейнерах и описаны в файле docker-compose.yml:

 version: '3.5'

services:
  db:
    image: mcr.microsoft.com/mssql/server:2017-latest
    deploy:
      replicas: 1
    environment:
      - ACCEPT_EULA=y
      - SA_PASSWORD=${SA_PASSWORD}
    ports:
      - 1433:1433
    volumes:
      -${MSSQL_STORAGE}:/var/opt/mssql

  ui:
    image: ${PRIVATE_DOCKER_REGISTRY}/${APPLICATION_NAME}/${SERVICE}:${TAG}
    deploy:
      replicas: 1
    ports:
    - 5000:80
    environment:
      ASPNETCORE_ENVIRONMENT: Development
      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
      GOOGLE_SECRET_ID: ${GOOGLE_SECRET_ID}
      DB_HOST: db
      DB_NAME: ${DB_NAME}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_USER: ${DB_USER}
 

Мое приложение при запуске в локальном режиме отладки и в локальном рое докеров выполняется должным образом (доступ с http://localhost:5000 помощью ). Я могу войти в систему с помощью аутентификации Google, и после входа в систему я перенаправляюсь на нужную страницу.

Однако при развертывании в экземпляре ec2 я не могу войти в систему.

docker service logs -tf {service_name} Я вижу следующее:

Майкрософт.AspNetCore.Идентификация.Google.GoogleHandler[4]

Ошибка при удаленной проверке подлинности: Ресурс временно недоступен.

ошибка:
Microsoft.AspNetCore.Диагностика.DeveloperExceptionPageMiddleware[1]

При выполнении запроса возникло необработанное исключение. Система.Исключение: При обработке удаленного входа в систему произошла ошибка.
System.Net.Http.HttpRequestException: Ресурс временно недоступен
System.Net.Сокеты.Исключение SocketException (11): Ресурс временно недоступен

в System.Net.Http.ConnectHelper.ConnectAsync(строковый хост, порт Int32, CancellationToken CancellationToken)
— Конец трассировки внутреннего стека исключений —
в System.Net.Http.ConnectHelper.ConnectAsync(строковый хост, порт Int32, CancellationToken CancellationToken)
в пуле System.Net.Http.HTTPConnectionPool.ConnectAsync(запрос HttpRequestMessage, логическое значение allowHttp2, CancellationToken CancellationToken)
в пуле System.Net.Http.HTTPConnectionPool.CreateHttp11ConnectionAsync(запрос HttpRequestMessage, отмена запроса CancellationToken)
в системе.Net.Http.HTTPConnectionPool.GetHttpConnectionAsync(запрос HttpRequestMessage, отмена запроса CancellationToken)
в System.Net.Http.HTTPConnectionPool.SendWithRetryAsync(запрос HttpRequestMessage, логическое значение doRequestAuth, CancellationToken CancellationToken)
в System.Net.Http.RedirectHandler.SendAsync(запрос HttpRequestMessage, отмена запроса CancellationToken)
в System.Net.Http.DiagnosticsHandler.SendAsync(запрос HttpRequestMessage, отмена запроса CancellationToken)
в System.Net.Http.HttpClient.FinishSendAsyncBuffered(Задание 1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at Microsoft.AspNetCore.Authentication.OAuth.OAuthHandler 1.ExchangeCodeAsync(контекст OAuthCodeExchangeContext)
в Microsoft.AspNetCore.Идентификация.OAuth.OAuthHandler 1.HandleRemoteAuthenticateAsync() at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler 1.HandleRequestAsync()
— Конец трассировки внутреннего стека исключений —
в Microsoft.AspNetCore.Идентификация.RemoteAuthenticationHandler`1.HandleRequestAsync()
в Microsoft.AspNetCore.Идентификация.Аутентификационное программное обеспечение.Вызовите(контекст HttpContext)
в Microsoft.AspNetCore.Диагностика.EntityFrameworkCore.MigrationsEndPointMiddleware.Вызовите(контекст HttpContext)
в Microsoft.AspNetCore.Диагностика.EntityFrameworkCore.DatabaseErrorPageMiddleware.Вызовите(HttpContext HttpContext)
в Microsoft.AspNetCore.Диагностика.EntityFrameworkCore.DatabaseErrorPageMiddleware.Вызовите(HttpContext HttpContext)
в Microsoft.AspNetCore.Диагностика.DeveloperExceptionPageMiddleware.Вызов(контекст HttpContext)

My nginx configuration is as follows:

 server {
        server_name mydomain.com;

        location / {
                proxy_pass         http://127.0.0.1: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;
        }


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
 

I’m thinking maybe the reverse proxy configuration is incorrect somehow? Incorrect headers maybe or something else?