繁体   English   中英

Apache 唯一 Vhost 用户,PHP 会话不起作用

[英]Apache unique Vhost user, PHP sessions not working

我希望运行一些 Apache 服务器,它将为多个客户端托管网站。 我已经安装了libapache2-mpm-itk模块,并为每个客户端文件集创建了唯一的用户/组。 并配置他们相应的 vhost 文件以使用该用户/组运行该进程。

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

这工作正常,直到我尝试使用 PHP 会话。 在 vhost 文件中,我还添加了自定义 session 保存路径。

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

PHP 脚本能够在具有以下权限的目录中生成 session 文件,但无法读取它们:

-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>

我在 Ubuntu 20.04 上运行 Apache 2.4.41,PHP 7.4.3 并且没有任何错误输出到我的日志文件。

对此以及进一步增强的任何想法/建议将不胜感激。

经过大量谷歌搜索后,我找到了解决方案。

我还需要确保已安装 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

我还发现 VHost 中定义的所有php_admin_value值都需要移动到 FPM 池中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM