Não é possível iniciar sessões no ambiente nginx php-fpm do chrooted no FreeBSD

1

Eu tenho uma máquina FreeBSD 11 executando o Nginx e o PHP-FPM no modo chrooted. Tudo funcionou bem, até eu adicionar start_session(); a index.php .

Foi quando recebi o seguinte erro:

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

Por favor, conselhos.

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();

?>
    
por Alex G 17.01.2018 / 19:54

2 respostas

1

Seu php_admin_value[session.save_path] deve ser relativo ao caminho chroot. (Depois do chroot, ele só precisará aparecer como /tmp ). No momento, ele está procurando por esse valor dentro da raiz do processo, o que resulta na procura de um "caminho real" de /home/project/customers/john/home/project/customers/john/tmp , que é improvável que exista.

    
por 17.01.2018 / 22:21
1

As sessões PHP dependem de /dev/urandom por padrão para gerar o ID aleatório, que obviamente não é acessível no modo chrooted do PHP-FPM. Existem centenas de outras dependências do sistema operacional, que meus projetos precisam para funcionar corretamente.

Neste ponto, estou descartando qualquer possibilidade de usar o modo chroot do PHP-FPM.

Mas se alguém ainda estiver interessado, você precisa montar: /dev/urandom para /home/project/customers/john/dev/urandom .

link

    
por 18.01.2018 / 04:57