ASP.NET MVC站点在AWS ELB之后无法正常工作
我正在尝试将一个使用单个用户帐户的ASP.NET MVC web应用程序部署到使用弹性负载平衡器(ELB)的AWS服务器上。我已将该站点部署到AWS应用服务器上的IIS,并将其连接到我的AWS SQL server,它在服务器上的工作与预期的一样(事实上,当我在Visual Studio中运行它或部署到内部服务器时) 当远程访问它时,问题就来了,当然是通过ELBASP.NET MVC站点在AWS ELB之后无法正常工作,asp.net,asp.net-mvc,amazon-web-services,amazon-elb,Asp.net,Asp.net Mvc,Amazon Web Services,Amazon Elb,我正在尝试将一个使用单个用户帐户的ASP.NET MVC web应用程序部署到使用弹性负载平衡器(ELB)的AWS服务器上。我已将该站点部署到AWS应用服务器上的IIS,并将其连接到我的AWS SQL server,它在服务器上的工作与预期的一样(事实上,当我在Visual Studio中运行它或部署到内部服务器时) 当远程访问它时,问题就来了,当然是通过ELB 如果我尝试访问它不起作用-它会将我重定向到,挂起,然后我得到一个408错误 如果我尝试访问,比如说,它不起作用-它会将我重定向到哪只
- 如果我尝试访问它不起作用-它会将我重定向到,挂起,然后我得到一个408错误
- 如果我尝试访问,比如说,它不起作用-它会将我重定向到哪只手,然后我会得到一个408错误
- 如果我尝试直接访问,它工作得很好。然后我可以登录,我的网站中的所有页面都可以正常工作。如果我退出,我会被重定向到,然后我会得到一个408错误
- 在我的web.config文件中添加规则来获取转发的请求并将它们重定向到HTTPS——这似乎并没有带来任何明显的区别
- 我的FilterConfig或登录操作中添加了各种不同的属性
- 使用URL重写直接在IIS中添加规则
按要求更新:我实际上无法控制我的ELB,因为这是由另一个团队完成的,但我从与团队交谈中了解到,它接受HTTPS流量,然后将其作为HTTP传递给服务器 MVC应用程序被配置为在用户需要登录时重定向到绝对http URL而不是相对URL 对于基于Owin中间件的新MVC应用程序,这是在
App\u Start/Startup.Auth.cs
中配置的
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
然后,在类的后面,添加以下函数:
private static void ApplyRedirect(CookieApplyRedirectContext context)
{
Uri absoluteUri;
if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out absoluteUri))
{
context.Response.Redirect(absoluteUri.PathAndQuery);
return;
}
context.Response.Redirect(context.RedirectUri);
}
基本上,这是将绝对URL转换为相对URL。然后将相对URL传递回浏览器。由于重定向是相对的,它应该维护https URL。请更新您的问题,以包括ELB侦听器的配置。听起来您的ELB被配置为接受HTTPS(负载平衡器端口),并将流量作为HTTP(实例端口)传递到服务器,但希望进行验证。您可以从AWS Web控制台的EC2>负载平衡>负载平衡器下查看此内容。如果不以HTTPS的形式发出请求确实是个问题,那么您也可以在这里解决它。@AnthonyNeace更新-我很确定您是正确的,这就是在
web.config
文件中设置它的方式,forms
元素中的loginUrl
值是多少?@MattHouser我的web.config
中没有forms
元素-我有
,我相信它来自原始的ASP.NET MVC模板。那么,您的MVC应用程序中有什么强制执行登录重定向?您的MVC应用程序中存在以下问题:(a)需要DashboardController
才能获得授权,以及(b)重定向到哪个页面才能让用户登录。我已根据MVC Owin应用程序更新了我的答案,该应用程序返回一个绝对位置:
重定向。这个答案提供了一种将其转换为相对的方法。这是有意义的-它目前对我的预生产服务器没有任何影响,但我现在根本没有在那里重定向,只是一个500错误,所以我怀疑我在这一过程中破坏了其他东西。一旦我在这个环境中对所有内容进行了排序,我将进行适当的尝试。似乎我实际上没有收到500个错误,一定是缓存有问题,因为当我在另一台计算机上尝试时,它工作正常,然后当我清除cookies等时,它工作正常。但这已经解决了这个问题-非常感谢!
private static void ApplyRedirect(CookieApplyRedirectContext context)
{
Uri absoluteUri;
if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out absoluteUri))
{
context.Response.Redirect(absoluteUri.PathAndQuery);
return;
}
context.Response.Redirect(context.RedirectUri);
}