【发布时间】:2018-03-23 22:08:45
【问题描述】:
我有一个在我的本地环境中正确运行 HTTPS 的网站。当我将它上传到 AWS 时,它只会超时或永远重定向。
我在 AWS 中的设置是一个 Elastic Beanstalk 应用程序,一个运行 MS SQL 的 RDS 数据库,我添加了一个负载均衡器来转发 HTTPS 请求,并且我有一个正确分配给负载均衡器的 SSL 证书。据我所知,我的应用程序正在运行,事实上,Entity Framework 启动并在我的 RDS 实例中正确构建了我的数据库。我就是无法通过互联网访问该网站。
我尝试过以不同的方式设置监听器。如果我这样设置它们,它只会永远重定向:
我有default HTTP/HTTPS port forwarding code in my Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
// Sets all calls to require HTTPS: https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// Force all HTTP requests to redirect to HTTPS: https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
var options = new RewriteOptions().AddRedirectToHttps();
app.UseRewriter(options);
...
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
...
}
我已经为此花费了几天时间,但我无法让它发挥作用。我试过把我所有的 HTTPS 代码都拿出来,但这不起作用。我已经尝试过来自 this 和 this 等博客的代码解决方案,但这也不起作用。根据我的阅读,负载均衡器最终会处理 HTTPS 请求,然后将 HTTP 请求转发到我的应用程序。但我不知道如何正确处理,仍然强制执行 HTTPS,并将 HTTP 重定向到 HTTPS。
这似乎是开箱即用的东西,无需我进行大量设置。如果不是这样,我认为现在很多其他人都会遇到这个问题,并且互联网上会有关于它的信息。我错过了一些小东西吗?因为我对此完全束手无策。
如果你能回答这个问题,你将成为我的新英雄。
【问题讨论】:
-
你能确认一下,如果你的负载均衡器是面向互联网的吗?您可以在描述选项卡中查看此详细信息
-
是的,负载均衡器是“面向互联网的”。
标签: amazon-web-services https asp.net-core .net-core amazon-elastic-beanstalk