nginx+php-fpm не работает session.gc_maxlifetime

Возникла проблема после перевода вэб-приложения с apache на nginx+php-fpm. В приложении реализована классическая аутентификация пользователей с сессиями + дополнительно куки. Куки ставятся только если установлена галочка типа "запомнить меня на час/сутки", галочки нет - только сессия (php функция session_start()). Затем в сесиию/куки пишется кое-какая служебная инфа, не суть. Проблема заключается во времени жизни сесии. Если юзер не поставил галочку - в игре только сессия, которая имеет время жизни, например 1440 секунд. На апаче если время сессии истекает - то юзера перебрасывает на страницу ввода логин/пароля, а на nginx+php-fpm - она не "умирает по maxlifetime"

вот конфиг nginx

user  www-data;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 30000;
pid /var/run/nginx.pid;
pcre_jit on;

events {
    worker_connections 1024;
    multi_accept on;
}

http {

    # Basic #######################
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    reset_timedout_connection   on;
    keepalive_timeout       120;
    keepalive_requests      1000;
    types_hash_max_size     4096;
    server_tokens       off;
    send_timeout        30;
    client_body_timeout     30;
    client_header_timeout   30;
    server_names_hash_max_size  4096;

    # Limits ######################
    
    client_max_body_size    10m;
    client_body_buffer_size 128k;
                            large_client_header_buffers 8 64k;
    client_body_temp_path   /var/cache/nginx/client_temp;

    proxy_connect_timeout   60;
    proxy_send_timeout      60;
    proxy_read_timeout      60;
    proxy_buffer_size       4k;
    proxy_buffers       8 16k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size  64k;
    proxy_temp_path     /var/cache/nginx/proxy_temp;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    # Logs ########################

    log_format  main    '[$time_local] $remote_addr -> $host "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"'
        'rt=$request_time ut=$upstream_response_time '
        'cs=$upstream_cache_status';
    log_format full '$remote_addr - $host [$time_local] "$request" '
               'request_length=$request_length '
               'status=$status bytes_sent=$bytes_sent '
               'body_bytes_sent=$body_bytes_sent '
               'referer=$http_referer '
               'user_agent="$http_user_agent" '
               'upstream_status=$upstream_status '
               'request_time=$request_time '
               'upstream_response_time=$upstream_response_time '
               'upstream_connect_time=$upstream_connect_time '
               'upstream_header_time=$upstream_header_time';
    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log;

    # Gzip ########################
    gzip on; 
    gzip_static on; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
    gzip_comp_level 9;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_disable "msie6";
    gzip_vary on;
    etag off;

    # Cache #######################
    #proxy_cache_valid 1m;
    #proxy_cache_key $scheme$proxy_host$request_uri$cookie_US;
    #proxy_cache_path /path/nginx_cache levels=1:2 keys_zone=main:1000m;

    # Zone limits ################

    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_req_zone $binary_remote_addr zone=lim_5r:10m rate=5r/s; # lim for dynamic page
    limit_req_zone $binary_remote_addr zone=lim_1r:10m rate=1r/s; # lim for search page
    limit_req_zone $binary_remote_addr zone=lim_10r:10m rate=10r/s;
    
    include /etc/nginx/conf.d/*.conf;

}
server {
            #listen 443 ssl http2;
            listen 192.168.111.100:80;
            server_name test.local;
    
    
    
        root /var/www/test.local/;
        # index index.php index.html index.htm;
        index index.php;
        access_log /var/www/test.local/access.log main;
        error_log /var/www/test.local/log/error.log;
        charset utf-8;
    
    location  / {
    try_files $uri $uri/ /index.php;
    }

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff|woff2)$ {
    access_log off;
    expires max;
    }

    location ~ \.php$ {
    fastcgi_pass   unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param DOCUMENT_ROOT  /var/www/test.local/;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /var/www/test.local$fastcgi_script_name;
    include fastcgi_params;
    #fastcgi_param QUERY_STRING $query_string;
    #fastcgi_param REQUEST_METHOD $request_method;
    #fastcgi_param CONTENT_TYPE $content_type;
    #fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_param HTTPS on;
    fastcgi_intercept_errors on;
    fastcgi_ignore_client_abort off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
#           fastcgi_ignore_headers;
    }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location ~ /\.ht {
    deny all;
    }
}


Php-fpm не ругается, доступ к директории сессий есть у юзера, под которым трудится fpm и nginx (выставлен www-data). Если в приложении нажать выход, то перебрасывает на страницу лог-ина, приложение очищает сессию, всё работает, дальше логина не пропускает. А вот если не нажимать "выход", то через полчаса юзер так и останется в приложении, хотя сессия должна же уже "умереть" и приложение должно при обновлении страницы перебросить на страницу лог-ина, сессия же просрочена. Повторюсь - с апачем корректно работало.


Ответы (0 шт):