【问题标题】:dotnetcore 2.1 mvc on nginx - routing issuesnginx 上的 dotnetcore 2.1 mvc - 路由问题
【发布时间】:2019-04-24 13:18:50
【问题描述】:

我一直在开发一个托管在 ubuntu/nginx 上的 dotnetcore 2.1 mvc 应用程序。一切都在我的本地(Windows)开发环境中运行良好。路由工作正常。我非常仔细地按照https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1 的说明进行操作。但是,当我尝试将应用程序发布到我配置的 ubuntu nginx 实例时,它会打开主页。但是,如果我尝试通过它的路由转到任何其他页面,则会出现 404 错误。例如,我创建了一个应该位于 /home/success 的页面,但是当我访问该页面时,它说它不存在。如果我在登录实例时使用 curl 并将其指向 http://localhost:5000/home/success 它也会引发 404 错误。这是我正在使用的代码。

Startup.cs

        public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.Configure<appsettings>(Configuration.GetSection("appsettings"));
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        //app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

/etc/nginx/sites-available/默认

server {
listen        80;
root          /var/www/cardnmore-customer/wwwroot;
server_name   ec2-54-149-68-43.us-west-2.compute.amazonaws.com
location / {
    proxy_pass         http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection keep-alive;
    proxy_set_header   Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
}

}

最后,这是我正在处理的应用程序的暂存 URL。 http://ec2-54-149-68-43.us-west-2.compute.amazonaws.com

我希望这是一件非常明显的事情,但从昨晚开始,我一直在努力解决这个问题。任何帮助将不胜感激。

【问题讨论】:

    标签: nginx asp.net-core-2.1


    【解决方案1】:

    当然,在我发布这个问题之后,我发现重新启动 nginx 服务显然不会重新加载应用程序。我必须重新启动我的 cardnmore-customer.service 才能使我的更改生效。在我来这里之前我做了一些事情,我怀疑其中一件事情是有效的。我做的第一件事就是将它添加到我在 startup.cs 中的 Configure void

    app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });
    

    我做的另一件事是更新我的默认 conf 文件,使其在 server_name 下具有实际 url(最初为空白)

    server {
    listen        80;
    root          /var/www/cardnmore-customer/wwwroot;
    server_name   ec2-54-149-68-43.us-west-2.compute.amazonaws.com
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
    

    无论如何,如果有人对此有任何补充,请随时。

    【讨论】:

      猜你喜欢
      • 2020-05-04
      • 1970-01-01
      • 2016-11-09
      • 2011-07-31
      • 1970-01-01
      相关资源
      最近更新 更多