#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.OAuthHandler1.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?