dotnetcore 2.1 mvc на nginx - проблемы с маршрутизацией - PullRequest
0 голосов
/ 24 апреля 2019

Я работал над приложением mvc dotnetcore 2.1, которое будет размещено на ubuntu / nginx.Все отлично работает в моей локальной (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 / default

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

Я надеюсь, что это что-то до боли очевидно, но я былударился головой о стену, пытаясь понять это с прошлой ночи.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 апреля 2019

Поэтому, разумеется, сразу после публикации этого вопроса я выясняю, что перезапуск службы nginx, очевидно, не перезагружает приложение. Мне пришлось перезапустить мой cardnmore-customer.service, чтобы мои изменения вступили в силу. Я сделал несколько вещей, прежде чем приехать сюда, и я подозреваю, что одна из тех вещей, которая работала. Первое, что я сделал, это добавил это в мой Configure void в startup.cs

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

Еще одна вещь, которую я сделал, - это обновил файл конфигурации по умолчанию, чтобы он содержал действительный 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;
}

В любом случае, если кому-то есть что добавить, пожалуйста, не стесняйтесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...