Сессии веб-сервера Apache истекают – вынуждая пользователей выходить из системы (не php)

Вопрос или проблема

У меня есть несколько веб-серверов, работающих за прокси-сервером. Эти веб-серверы запускают приложение, но, похоже, пользователи получают ошибку “сессия истекла”. Эта ошибка вызывает выход из системы, и пользователям необходимо обновить свой браузер, чтобы снова войти в систему.

Есть ли какие-либо предложения о том, что можно сделать, чтобы продлить срок действия сессии? Вот некоторые настройки, которые я уже отрегулировал:

ПРОКСИ

/etc/apache2/sites-enabled/vhosts.conf

<VirtualHost *:443>
       ServerName XXX
       ServerAlias XXX
       SSLEngine On
       SSLCertificateKeyFile /XXX/server.key
       SSLCertificateFile /XXX/WILDCARD.crt
       SSLCertificateChainFile /XXX/WILDCARD.ca-bundle
       SSLProxyEngine On
       ProxyPreserveHost On
       <Proxy *>
               Require all granted
       </Proxy>
       ProxyPass "/" "http://<ip_of_webserver>/"
       ProxyPassReverse "/" "http://<ip_of_webserver>/"
       Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>

/etc/apache2/mods-enabled/status.conf

<IfModule mod_status.c>
        # Разрешить отчеты о состоянии сервера, генерируемые mod_status,
        # с URL-адресом http://servername/server-status
        # Рекомендуется раскомментировать и изменить "192.0.2.0/24", чтобы разрешить доступ с других хостов.

        <Location /server-status>
                SetHandler server-status
                Require local
                #Require ip 192.0.2.0/24
                ## Добавить собственный диапазон
                Require ip IP-range/24
        </Location>

        # Отслеживать расширенную информацию о статусе для каждого запроса
        ExtendedStatus On

        # Определяет, отображает ли mod_status первые 63 символа запроса или
        # последние 63, предполагая, что сам запрос больше 63 символов.
        # По умолчанию: Выключен
        #SeeRequestTail On


        <IfModule mod_proxy.c>
                # Показать статус Proxy LoadBalancer в mod_status
                ProxyStatus On
        </IfModule>


</IfModule>

/etc/apache2/mods-enabled/mpm_event.conf

# event MPM
# StartServers: начальное количество процессов сервера для запуска
# MinSpareThreads: минимальное количество рабочих потоков, которые держатся в резерве
# MaxSpareThreads: максимальное количество рабочих потоков, которые держатся в резерве
# ThreadsPerChild: постоянное количество рабочих потоков в каждом процессе сервера
# MaxRequestWorkers: максимальное количество рабочих потоков
# MaxConnectionsPerChild: максимальное количество запросов, которые обслуживает процесс сервера
#<IfModule mpm_event_module>
#       StartServers                     2
#       MinSpareThreads          25
#       MaxSpareThreads          75
#       ThreadLimit                      64
#       ThreadsPerChild          25
#       MaxRequestWorkers         150
#       MaxConnectionsPerChild   0
#</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet


### Отрегулированные стандартные значения
<IfModule mpm_event_module>
        StartServers                     5
#       MinSpareThreads          25
#       MaxSpareThreads          75
        ServerLimit     2000
        ThreadLimit                      64
        ThreadsPerChild          25
        MaxRequestWorkers         1500
#       MaxConnectionsPerChild   0
</IfModule>

Есть идеи, где я могу добавить больше исключений, чтобы сессия длилась дольше?

Ответ или решение

Решение проблемы с истечением сессий на Apache Web Server

Ваша проблема с истечением сессий пользователей на веб-серверах, работающих за прокси-сервером, может быть вызвана рядом факторов. Давайте рассмотрим возможные причины и рекомендации по их устранению для продления времени жизни сессий.

1. Настройки веб-сервера Apache

Первое, что необходимо проверить — это настройки вашего веб-сервера Apache. В конфигурационных файлах, которые вы представили, нет явных параметров, отвечающих за управление сессиями. Однако, если ваша веб-приложение управляет сессиями через HTTP-заголовки или куки, убедитесь, что значения параметров, таких как SessionTimeout, рассчитываются правильно.

Рекомендуется добавить следующие параметры в конфигурацию Apache для продления времени жизни сессий:

<IfModule mod_headers.c>
    Header set Set-Cookie "session_id=your_session_id; HttpOnly; Secure; Max-Age=3600; Path=/"
</IfModule>

Здесь Max-Age=3600 устанавливает срок действия куки в 1 час. Примените необходимое значение, соответствующее вашему бизнес-процессу.

2. Настройки прокси

Ваш прокси-сервер может также играть ключевую роль в управлении сессиями. Проверьте настройки прокси:

  • Убедитесь, что заголовки, касающиеся управления сессиями, корректно передаются между прокси и вашим приложением. Это включает как заголовки авторизации, так и куки, отвечающие за аутентификацию.

  • Если вы используете такие заголовки, как X-Forwarded-For, убедитесь, что ваши конечные точки приложения правильно на них реагируют на серверной стороне.

Также можно рассмотреть возможность использования конфигурации ProxyPass с дополнительными параметрами для управления кэшированием и сессиями.

3. Тайм-ауты на уровне приложения

Проверьте настройки тайм-аутов на уровне вашего веб-приложения. Если приложение использует серверные механизмы для управления сессиями, устанавливайте или изменяйте параметры политик сессий, такие как:

  • session.gc_maxlifetime — время в секундах, после которого неактивные сессии будут удалены. Убедитесь, что это значение больше, чем время, которое пользователи могут проводить между запросами.

    ini_set('session.gc_maxlifetime', 3600); // 1 час
  • session.cookie_lifetime — время жизни куки, связанного с сессией; укажите его значение равным 0, чтобы куки оставались до закрытия браузера, или установите другое желаемое значение.

    ini_set('session.cookie_lifetime', 3600); // 1 час

4. Настройки кэширования

Проверьте также настройки кэширования как на уровне сервера, так и в самом приложении. Параметры и методы кэширования могут влиять на то, как управляются сессии. Возможно, пригодятся различные заголовки кэширования:

Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header set Pragma "no-cache"

Заключение

Чтобы продлить жизнь сессий на вашем веб-сервере Apache, необходимо провести всесторонний анализ текущих настроек вашего сервера, прокси-сервера и самого приложения. Проверьте правильность передачи заголовков, настройте параметры куки и тайм-аутов, а также займите прояснением поведения кэширования. Эти шаги помогут улучшить пользовательский опыт и устранить ошибки, связанные с истечением сессий.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...