Назад | Перейти на главную страницу

Не удается запустить сеанс в chrooted среде nginx php-fpm во FreeBSD

У меня есть машина FreeBSD 11, на которой запущены последние версии Nginx и PHP-FPM в режиме chrooted. Все работало нормально, пока не добавил start_session(); к index.php.

Тогда я получил следующую ошибку:

Fatal error: Uncaught Exception: Cannot open source device in /index.php:5 Stack trace: #0 /index.php(5): session_start() #1 {main} Next Exception: Cannot open source device in /index.php:5 Stack trace: #0 /index.php(5): session_start() #1 {main} Next Exception: Cannot open source device in /index.php:5 Stack trace: #0 /index.php(5): session_start() #1 {main} Next Exception: Cannot open source device in /index.php:5 Stack trace: #0 /index.php(5): session_start() #1 {main} Next Error: Failed to create session ID: files (path: /home/project/customers/john/tmp) in /index.php:5 Stack trace: #0 /index.php(5): session_start() #1 {main} thrown in /index.php on line 5

Пожалуйста посоветуй.

nginx.conf
    server {
        listen      443 ssl http2;

        add_header  Cache-Control no-cache;

        ssl on;
        ssl_certificate     /home/project/ssl/project.chain;
        ssl_certificate_key /home/project/ssl/project.key;
        ssl_prefer_server_ciphers on;

        server_name     john.project.net;
        error_log       /home/project/logs/john-error.log;
        access_log      /home/project/logs/john-access.log;

        root            /home/project/customers/john;
        index           index.php;

        location / { deny all; }

        location = / { }
        location = /index.php {
            include         fastcgi_params;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME $fastcgi_script_name;
            fastcgi_pass    unix:/var/run/php-fpm-project-john.sock;
            try_files       $uri =404;
        }
        location ~ \.(txt|css|map|jpg|png|gif|ico|htc|otf|eot|svg|ttf|woff|woff2|js|ogg)$ { }
    }

php-fpm.conf
    [project-john]
    prefix = /home/project/customers/john
    user = www
    group = www
    listen = /var/run/php-fpm-project-john.sock
    listen.owner = www
    listen.group = www
    listen.mode = 0660
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chroot = $prefix
    chdir = /
    php_admin_value[session.save_path] = /home/project/customers/john/tmp ; Writable

index.php
<?php

    ini_set('display_errors', 1);
    echo "test";
    session_start();

?>

Сеансы PHP полагаются на /dev/urandom по умолчанию для генерации случайного идентификатора, который, конечно, недоступен в chrooted режиме PHP-FPM. Существуют сотни других зависимостей ОС, от которых мои проекты должны правильно работать.

На этом этапе я отказываюсь от любой возможной возможности использования chrooted режима PHP-FPM.

Но если кому-то еще интересно, нужно смонтировать: /dev/urandom к /home/project/customers/john/dev/urandom.

https://www.vennedey.net/resources/3-Secure-webspaces-with-NGINX-PHP-FPM-chroots-and-Lets-Encrypt

Ваш php_admin_value[session.save_path] должен быть относительно chroot-пути. (После chroot он просто должен будет выглядеть как /tmp). Прямо сейчас он ищет это значение в корне процесса, что приводит к поиску "реального пути" /home/project/customers/john/home/project/customers/john/tmp, который вряд ли существует.