Общий сеанс .Net Core 2.2 с обратным прокси-сервером Apache2

У меня есть два экземпляра веб-приложения .Net Core 2.2 (test & test2), работающего как службы Linux, за обратным прокси-сервером Apache2. Я пытаюсь разделить сеанс между обоими приложениями.

Проблема в том, что application1 запускает создание cookie-файла сеанса по пути /. Application2 запускает собственный сеанс и записывает то же имя файла cookie в путь /. Попытка выяснить, почему application2 не видит существующий cookie-файл application1, и использовать его вместо создания нового сеанса, перезаписывающего сеанс application1.

Я думаю, что это проблема с моей конфигурацией .conf, так как оба приложения работают, как и ожидалось, в рамках своих изолированных сеансов. Просто когда я пытаюсь поделиться через обратный прокси, я вижу проблему. Я также не эксперт по Apache, поэтому очень вероятно, что я что-то упустил или что-то там не так.

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.Lax;
        });

        services.AddDistributedMemoryCache(); 

        int sessionTimeout = int.Parse(_configuration["Hosting:SessionTimeout"]);
        services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromMinutes(sessionTimeout);
            options.Cookie.SameSite = SameSiteMode.Strict;
            options.Cookie.HttpOnly = true;
            options.Cookie.IsEssential = true;
            options.Cookie.Name = "session";
        });

        services.AddHttpContextAccessor();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ClassLibrary.Mvc.Constants.PathBase = string.Empty;
        if (!string.IsNullOrEmpty(_configuration["Hosting:RoutePath"]))
        {
            string routePath = _configuration["Hosting:RoutePath"].Trim();
            if (routePath[0] != '/')
                routePath = "/" + routePath;
            if (routePath[routePath.Length - 1] == '/')
                routePath = routePath.Substring(0, (routePath.Length - 1));

            app.UsePathBase(routePath);
            ClassLibrary.Mvc.Constants.PathBase = routePath;
            _logger.Information($"Route Path: {routePath}");
        }

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

        app.UseHttpsRedirection();
        app.UseCookiePolicy();

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

application.conf

<VirtualHost *:443>

    SSLEngine On
    SSLUseStapling Off
    SSLCertificateFile  /etc/apache2/ssl/application.cdcavell.tst/certificate.crt
    SSLCertificateKeyFile /etc/apache2/ssl/application.cdcavell.tst/certificate.key

    DocumentRoot "/var/www/Application"
    ServerName application.cdcavell.tst
    ServerAdmin cdcavell@gmail.com

    ErrorLog /var/www/Application/logs/apache2-error.log
    CustomLog /var/www/Application/logs/apache2-access.log common
    LogLevel Error


    Session On

    ProxyPreserveHost On
    SSLProxyEngine On
    SSLProxyVerify None
    SSLProxyCheckPeerCN Off
    SSLProxyCheckPeerName Off

    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

    <Location "/test">
        ProxyPass "https://127.0.0.1:5020/test"
        ProxyPassReverse "https://127.0.0.1:5020/test"
        ProxyPassReverseCookiePath "/test" "/"        
        Order allow,deny
        Allow from all
    </Location>

    <Location "/test2">
        ProxyPass "https://127.0.0.1:5023/test2"
        ProxyPassReverse "https://127.0.0.1:5023/test2"
        ProxyPassReverseCookiePath "/test2" "/"        
        Order allow,deny
        Allow from all
    </Location>

</VirtualHost>

Полный источник: Функция ветки GitHub / 0.3.0

0
задан 24 August 2019 в 05:32

0 ответов

Другие вопросы по тегам:

Похожие вопросы: