Apache уникальный пользователь Vhost, PHP сеанс не работает - PullRequest
0 голосов
/ 20 июня 2020

Я хочу запустить несколько серверов Apache, на которых будут размещаться веб-сайты для нескольких клиентов. Я установил модуль libapache2-mpm-itk и создал уникальных пользователей / группы для каждого набора файлов клиентов. И настроил соответствующий файл vhost для запуска процесса с этим пользователем / группой.

<IfModule mpm_itk_module>
      AssignUserId www-client www-client1
</IfModule>

Это отлично работает, пока я не попытаюсь использовать PHP сеансов. В файле vhost я также добавил настраиваемый путь сохранения сеанса.

php_admin_value session.save_path "/var/www/html/client1/_php/session"

Сценарий PHP может создавать файлы сеанса в каталоге со следующими разрешениями, но не может их читать:

-rw------- www-client1 www-client1

Полный пример моего виртуального хоста:

<VirtualHost *:443>
   ServerName client1.com
   ServerAlias client1.com www.client1.com
   DocumentRoot /var/www/html/client1/www
   ErrorLog /var/www/logs/client1/www-error.log
   CustomLog /var/www/logs/client1/www-access.log combined
   php_admin_value error_log "/var/www/logs/client1/www-error.php.log"

   <Directory /var/www/html/client1/www>
      Options None
      AllowOverride None
      Order Deny,Allow
      Allow from All
   </Directory>

   <IfModule mpm_itk_module>
      AssignUserId www-client1 www-client1
   </IfModule>

   php_admin_value log_errors 1
   php_admin_value open_basedir "/var/www/html/client1"
   php_admin_value upload_tmp_dir "/var/www/html/client1/_php/upload_tmp"
   php_admin_value session.save_path "/var/www/html/client1/_php/session"
   php_admin_value soap.wsdl_cache_dir "/var/www/html/client1/_php/soap_cache"

   SSLEngine On
   SSLCertificateFile /var/www/certs/client1/www.crt
   SSLCertificateKeyFile /var/www/certs/client/www.key
</VirtualHost>

Я работаю Apache 2.4.41, PHP 7.4.3 на Ubuntu 20.04 и нет ошибки выводятся в любой из моих файлов журнала.

Мы будем очень признательны за любые идеи / предложения по этому и дальнейшим улучшениям.

1 Ответ

1 голос
/ 12 августа 2020

После долгих поисков в Google я нашел решение.

Мне также нужно было убедиться, что php -fpm был установлен, и добавить следующие строки конфигурации в Apache VHost, указывающие на уникальный PHP Сокет FPM для каждого пользователя исправил мою проблему.

<FilesMatch \.php$>
   SetHandler "proxy:unix:/run/php/php-fpm-client1.sock|fcgi://localhost"
</FilesMatch>

Мой PHP файл конфигурации FPM выглядит так:

vi /etc/php/X/fpm/pool.d/client1.conf
[client1]
  
user = www-client1
group = www-client1
listen = /run/php/php-fpm-client1.sock
listen.owner = www-client1
listen.group = www-client1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[log_errors] = 1
php_admin_value[error_log] = "/var/www/logs/client1/php-error.log"
php_admin_value[open_basedir] = "/var/www/html/client1"
php_admin_value[session.save_path] = "/var/www/html/client1/_php/session"

bash /etc/init.d/php*-fpm restart

Я также обнаружил, что все значения php_admin_value, определенные в VHost необходимо переместить в пул FPM.

...