簡體   English   中英

帶有Nginx的ASP.NET 5.0 Kestrel服務器

[英]ASP.NET 5.0 Kestrel server with nginx

我正在嘗試在Ubuntu上托管一個ASP.NET 5.0(測試版4)網站。 我已經用Nginx配置了Kestrel作為反向代理,但是有一些問題使它不能用於生產站點:

  • HTTP 404錯誤頁面為空白-是否可以將ASP.NET/Kestrel或nginx配置為發送自定義頁面而不是空白頁面?
  • 如何配置URL重寫-例如,除了ASP.NET內容之外,我還有一些靜態.htm頁面,並且我想重寫這些頁面以在沒有.htm擴展名的情況下提供服務

感謝Matt DeKrey的建議,我使用了兩個中間件來完成這項工作。

對於自定義404錯誤頁面,我使用了:

public class CustomErrorMiddleware
{
    private readonly RequestDelegate next;

    public CustomErrorMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        context.Response.StatusCode = 404;
        context.Response.ContentType = "text/html";
        await context.Response.SendFileAsync("/errors/404.html");
    }
}

在URL重寫時,我使用了:

public class UrlRewriteMiddleware
{
    private readonly RequestDelegate next;

    public UrlRewriteMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        // Redirect from /some/page.htm to /some/page
        Regex r1 = new Regex("^/some/[a-zA-Z0-9]+\\.htm$");
        if (r1.IsMatch(context.Request.Path.Value))
        {
            context.Response.Redirect(context.Request.Path.Value.Substring(0, context.Request.Path.Value.Length - 4));
            return;
        }

        // Rewrite from /some/page to /some/page.htm
        Regex r2 = new Regex("^/some/[a-zA-Z0-9]+$");
        if (r2.IsMatch(context.Request.Path.Value))
            context.Request.Path = new PathString(context.Request.Path.Value + ".htm");

        await next(context);
    }
}

然后,將Startup.cs修改為使用其中每個。 中間件是按照指定的順序運行的,因此需要先進行URL重寫才能在收到請求時修改請求。 自定義404錯誤中間件需要最后捕獲所有其他中間件未處理的請求。 例如:

public void Configure(IApplicationBuilder app)
{
    app.UseMiddleware<UrlRewriteMiddleware>();

    app.UseStaticFiles();

    app.UseMvc();

    app.UseMiddleware<CustomErrorMiddleware>();
}

暫無
暫無

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

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