![](/img/trans.png)
[英]"Resource not found or temporarily unavailable" error in ASP.NET MVC 5
[英]ASP.NET Core 3.1 with google signin, nginx reverse proxy and docker Resource temporarily unavailable
我正在构建一个 ASP.NET Core 3.1 web 应用程序,目标是托管在 AWS EC2 实例上。
我的设置如下:
web 应用程序和 SQL 服务器数据库都在容器中运行,并在 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}
我的应用程序在本地调试模式和本地 docker 群中运行时按预期运行(使用http://localhost:5000
访问)。 我可以使用我的谷歌身份验证登录,登录后我被重定向到正确的页面。
但是,当我部署到 ec2 实例时,我无法登录。
docker service logs -tf {service_name}
我看到以下内容:
Microsoft.AspNetCore.Authentication.Google.GoogleHandler[4]
来自 RemoteAuthentication 的错误:资源暂时不可用。
失败:
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]执行请求时发生未处理的异常。 System.Exception:处理远程登录时遇到错误。
System.Net.Http.HttpRequestException:资源暂时不可用
System.Net.Sockets.SocketException (11): 资源暂时不可用在 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机、Int32 端口、CancellationToken cancellationToken)
--- 内部异常堆栈跟踪结束 ---
在 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机、Int32 端口、CancellationToken cancellationToken)
在 System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage 请求,Boolean allowHttp2,CancellationToken cancellationToken)
在 System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)
在 System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)
在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,Boolean doRequestAuth,CancellationToken cancellationToken)
在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)
在 System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)
在 System.Net.Http.HttpClient.FinishSendAsyncBuffered(任务1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at Microsoft.AspNetCore.Authentication.OAuth.OAuthHandler
1.ExchangeCodeExchangeAsync(OtextCodeExchangeAsync)
在 Microsoft.AspNetCore.Authentication.OAuth.OAuthHandler1.HandleRemoteAuthenticateAsync() at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler
1.HandleRequestAsync()
--- 内部异常堆栈跟踪结束 ---
在 Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext 上下文)
在 Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext 上下文)
在 Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
在 Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext)
在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)
我的nginx配置如下:
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
}
我在想也许反向代理配置不正确? 标题可能不正确或其他什么?
当您的应用位于反向代理之后时,Google Auth 的一个常见问题是 URL 与您在 Google Developers Console 中提供的 URL/域名不匹配。 使用反向代理时,您正在将请求 URL 从 mydomain.com 更改为http://127.0.0.1:5000 。
在您的代码中添加 ForwardedHeaders 应该可以解决此问题,以便请求保留原始 URL 以及转发的 Url
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedProto }); // other Configure code here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.