ova*_*nko 3 c# apache kestrel-http-server asp.net-core
我需要澄清 ASP.NET Core 应用程序在 Linux 上的设置过程。我有 Apache 作为服务器,我想用它作为反向代理。在我的 ASP.NET Core 应用程序上,我有这样的设置:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
Run Code Online (Sandbox Code Playgroud)
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
Run Code Online (Sandbox Code Playgroud)
转发标头 - 这些位于“如何在 Linux 上运行 ASP.NET Core”的文档中。
在 Program.cs 中我有:
var host = WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseUrls("https://*:5001")
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
Run Code Online (Sandbox Code Playgroud)
我有的问题:
app.UseHttpsRedirection();到我的项目中吗?UseUrls("https://*:5001")在这一行中指定 https 还是可以是 http ?\n\n\n我是否需要这些转发标头?
\n
一般来说,是的。反向代理的工作方式是,它们基本上接收最终用户的请求,然后通过发出新请求将请求转发到您的应用程序。来自反向代理的新请求有自己的标头,对于您的应用程序来说,它\xe2\x80\x99s 就像从未有过公共请求一样。
\n\n这意味着您的应用程序仅了解内部请求,因此也只能生成内部 URL。为了向您的应用程序介绍外部 URL,您可以使用反向代理提供的转发标头,以便您的应用程序恢复原始请求的外观。这样,您的应用程序就会了解公共请求并可以正确响应。
\n\n\n\n\n我需要添加
\napp.UseHttpsRedirection();到我的项目中吗?
不必要。HTTPS 重定向基本上是一种自动响应 HTTP 请求并重定向到 HTTPS 的功能。通常,应用程序前面的反向代理会处理这个问题,因此当与直接暴露的 Kestrel 一起使用时,此功能最有意义。
\n\n但如果您想在应用程序中使用该功能,而不是在反向代理内部,您仍然可以使用该功能。如果您的反向代理在 HTTP 和 HTTPS 上为您的应用程序提供服务,并且它还在 Forwarded 标头中正确转发该方案,那么您的应用程序可以正确检测到这一点并重定向到 HTTPS。
\n\n从安全角度来看,反向代理最好(也可能更简单)不将任何 HTTP 请求转发到您的应用程序,而是自行重定向到 HTTPS。
\n\n\n\n\n我需要
\nUseUrls("https://*:5001")在这一行中指定 https 还是可以是 http ?
这还取决于您希望如何在内部设置应用程序。通常,由于您的反向代理是公开可见的,因此您不需要在内部使用 HTTPS,这通常也会以更少的开销带来更好的性能(并且降低了证书的配置复杂性) 。但在某些情况下,您可能希望在内部使用 HTTPS,以使您的应用程序更安全并更好地保护其传输的数据。不过,\xe2\x80\x99 完全取决于你。
\n\n我通常建议您不要使用调用UseUrl(),而只使用ASPNETCORE_URLS环境变量来指定内部托管 URL 和端口。这样,您就可以更灵活地应对环境变化,并且可以在部署应用程序时选择系统上的端口,并且您不必重新编译应用程序来切换内部端口。
\n\n\n我的 Kestrel(我的应用程序)上是否需要使用 https,或者如果我有反向代理,我可以使用 http 并且 Apache 将处理 ssl?
\n
如上所述,设置通常是您的反向代理托管在 HTTPS 上,并且反向代理和您的应用程序之间的内部通信可以通过 HTTP 进行。不过,您也完全可以选择在内部使用 HTTPS。
\n\n\n\n\n我的 ASP.NET Core 应用程序中是否需要有任何其他代码才能使其与反向代理一起使用?
\n
不需要,为了让应用程序允许其在反向代理后面运行,您通常需要的只是激活转发标头中间件(如果您在 IIS 后面运行,则激活 IISIntegration)。其余的设置发生在反向代理上,您需要确保转发的标头也已正确设置。
\n| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |