You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在mpm_event模式下为Apache2虚拟主机配置不同用户/组

在Apache mpm_event模式下实现多站点独立用户/组运行PHP的方案

由于mod_itk和mod_privileges与mpm_event不兼容,推荐使用PHP-FPM搭配Apache反向代理的方案,既能保留mpm_event的HTTP/2支持,又能实现每个站点以独立用户/组运行PHP。

步骤1:启用必要的Apache模块

确保Apache启用mpm_event、proxy_fcgi及相关模块,同时禁用与mpm_event冲突的模块:

# 启用模块
a2enmod mpm_event proxy_fcgi setenvif
# 禁用冲突的mpm_prefork和mod_php(如果之前启用过)
a2dismod mpm_prefork php*
# 重启Apache生效
systemctl restart apache2

步骤2:为每个站点配置独立PHP-FPM池

PHP-FPM允许创建多个独立进程池,每个池可指定单独的运行用户/组。

  • 进入PHP-FPM的池配置目录(路径根据PHP版本调整,示例为PHP 8.2):
    cd /etc/php/8.2/fpm/pool.d/
    
  • 为site0创建池配置文件site0.conf:
    [site0]
    ; 指定站点运行的用户和组
    user = user0
    group = groupuser0
    ; 定义FPM监听的Unix Socket(避免端口冲突)
    listen = /run/php/php8.2-fpm-site0.sock
    ; Socket的所有者设为www-data,确保Apache能访问
    listen.owner = www-data
    listen.group = www-data
    ; 进程管理配置(根据站点流量调整)
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
  • 同理创建site1.conf,替换user、group和listen路径为对应的值。

步骤3:配置Apache虚拟主机,转发PHP请求到对应FPM池

修改每个站点的虚拟主机配置,将PHP请求转发到对应的FPM Socket,并启用HTTP/2:

site0虚拟主机示例:

<VirtualHost *:80>
    ServerName site0.example.com
    DocumentRoot /var/www/site0

    <Directory /var/www/site0>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ; 将.php请求转发到site0的FPM Socket
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.2-fpm-site0.sock|fcgi://localhost/"
    </FilesMatch>

    ; 启用HTTP/2(需确保Apache已支持)
    Protocols h2 http/1.1
</VirtualHost>
  • site1虚拟主机只需替换DocumentRoot、ServerName和SetHandler中的Socket路径为对应配置即可。

步骤4:重启服务生效

# 重启PHP-FPM
systemctl restart php8.2-fpm
# 重启Apache
systemctl restart apache2

验证效果

访问每个站点的phpinfo()页面,查看User/Group字段,会显示对应站点的user0/groupuser0或user1/groupuser1,同时Server API为FPM/FastCGI,Apache的MPM模式为event,且HTTP/2正常工作。

权限补充说明

无需修改站点文件的所有权,只需确保对应站点用户(如user0)对/var/www/site0下的文件有读取权限:

  • 可设置文件权限为644,目录权限为755;
  • 若需要写入权限,可通过ACL给对应用户添加权限:
    setfacl -R -m u:user0:rwx /var/www/site0
    

内容的提问来源于stack exchange,提问作者PsyTrxOps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:22