簡體   English   中英

具有Apache和反向代理的Linux ASP.Net核心

[英]Linux ASP.Net core with Apache and reverse proxy

我需要闡明Linux上ASP.NET Core應用程序的設置過程。 我有Apache作為服務器,我想將其用作反向代理。 在我的ASP.NET Core應用上,我有這樣的設置:

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders =
        ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

轉發標頭-這些標頭在“如何在Linux上運行ASP.NET Core”文檔中。

在Program.cs中,我有:

var host = WebHost.CreateDefaultBuilder(args)
    .UseKestrel()
    .UseUrls("https://*:5001")
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

我有問題:

  1. 我是否完全需要這些Forwarded標頭?
  2. 我是否需要添加app.UseHttpsRedirection(); 進入我的項目?
  3. 我需要在此行中指定UseUrls("https://*:5001") https還是HTTP?
  4. 我是否需要在我的Kestrel(我的應用程序)上安裝一般的https,或者如果我有反向代理,我可以使用http,Apache會處理ssl嗎?
  5. 我是否需要在ASP.NET Core應用程序中包含任何其他代碼才能使其與反向代理一起使用?

我是否完全需要這些Forwarded標頭?

一般來說,是的。 反向代理的工作方式是,它們基本上接收最終用戶的請求,然后通過發出新請求將請求轉發到您的應用程序。 來自反向代理的新請求具有其自己的標頭,對於您的應用程序,好像從來沒有公共請求一樣。

這意味着您的應用僅了解內部請求,因此例如也只能生成內部URL。 為了向您的應用程序介紹有關外部URL的信息,您可以使用反向代理提供的轉發報頭,以使您的應用程序恢復原始請求的外觀。 這樣,您的應用程序就可以知道公開請求,並且可以正確響應。

我是否需要添加app.UseHttpsRedirection(); 進入我的項目?

不必要。 HTTPS重定向基本上是一項功能,它將通過重定向到HTTPS自動響應對HTTP的請求。 通常,應用程序前面的反向代理會解決此問題,因此在直接暴露Kestrel的情況下使用此功能最有意義。

但是,如果您想在應用程序中使用此功能,而不是在反向代理中使用它,則仍然可以使用該功能。 如果反向代理同時在HTTP和HTTPS上為您的應用程序提供服務,並且還可以在Forwarded標頭中正確轉發該方案,則您的應用程序可以正確地檢測到該問題並重定向到HTTPS。

從安全性的角度來看,反向代理最好不要(而不是簡單地)不轉發任何HTTP請求到您的應用,而直接重定向到HTTPS。

我需要在此行中指定UseUrls("https://*:5001") https還是HTTP?

這也取決於您要如何在內部設置應用程序。 通常 ,由於反向代理是公開可見的反向代理,因此您不需要在內部使用HTTPS,這通常還可以以更少的開銷獲得更好的性能(並降低證書的配置復雜性)。 但是在某些情況下,您甚至可能希望在內部使用HTTPS,以使您的應用程序更安全並更好地保護其傳輸的數據。 不過,這完全取決於您。

我通常建議您不要使用UseUrl()調用,而只是使用ASPNETCORE_URLS環境變量來指定內部托管URL和端口。 這樣,您就可以更靈活地應對環境更改,並且可以在部署應用程序時選擇系統上的端口,而不必重新編譯應用程序即可切換內部端口。

我是否需要在我的Kestrel(我的應用程序)上安裝一般的https,或者如果我有反向代理,我可以使用http,Apache會處理ssl嗎?

如上所述,設置通常是您的反向代理托管在HTTPS上,並且反向代理與您的應用程序之間的內部通信可以通過HTTP進行。 您也可以完全選擇在內部使用HTTPS。

我是否需要在ASP.NET Core應用程序中包含任何其他代碼才能使其與反向代理一起使用?

不,為了使該應用程序能夠在反向代理之后運行,您通常所需要做的就是激活轉發的標頭中間件(如果您在IIS后面運行,則激活IISIntegration)。 其余的設置在反向代理上進行,在反向代理上,您需要確保正確設置了轉發的標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM