在FPM/FastCGI虚拟主机中设置PHP限制
解决Fedora 27下Apache+PHP-FPM虚拟主机独立PHP配置问题
Hey there! 你的判断完全正确——Fedora 27默认确实采用PHP-FPM搭配Apache,而非传统的mod_php,这正是你之前操作失效的核心原因。下面给你两种实用方案,从最规范的开始:
方法1:为虚拟主机创建独立PHP-FPM池(推荐)
这种方式能让每个虚拟主机拥有完全隔离的PHP运行环境,参数配置更灵活彻底。
步骤1:创建独立的PHP-FPM池配置文件
Fedora的PHP-FPM池配置都存放在/etc/php-fpm.d/目录,复制默认模板来生成新配置:
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/pokus.cz.conf
编辑新生成的pokus.cz.conf,修改关键配置项:
# 唯一的池名称 [pokus.cz] # 自定义监听套接字路径,确保和其他池不重复 listen = /run/php-fpm/pokus.cz.sock # 设置套接字权限,和Apache用户组一致 listen.owner = apache listen.group = apache listen.mode = 0660 # 运行进程的用户组,匹配Apache配置 user = apache group = apache # 配置你需要的PHP参数,比如memory_limit php_admin_value[memory_limit] = 64M # 可按需添加其他参数 php_admin_value[upload_max_filesize] = 20M php_admin_value[post_max_size] = 25M # 进程管理配置(可根据服务器资源调整) pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35
步骤2:修改虚拟主机配置,指向新FPM池
打开你的虚拟主机配置文件(比如/etc/httpd/conf.d/vhosts.d/pokus.cz.conf),添加PHP-FPM代理规则:
<VirtualHost *:80> ServerName pokus.cz DocumentRoot /var/www/pokus.cz/public_html <Directory /var/www/pokus.cz/public_html> AllowOverride All Require all granted </Directory> # 将PHP请求转发到自定义的FPM套接字 <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/pokus.cz.sock|fcgi://localhost/" </FilesMatch> </VirtualHost>
步骤3:重启服务生效
systemctl restart php-fpm systemctl restart httpd
方法2:通过环境变量传递PHP参数(适合简单需求)
如果不想创建独立池,也可以通过Apache环境变量给共享FPM池传递参数,灵活性稍弱但操作更简便:
步骤1:修改默认FPM池配置
打开/etc/php-fpm.d/www.conf,确保允许保留外部环境变量:
clear_env = no
步骤2:在虚拟主机配置中添加环境变量
<VirtualHost *:80> ServerName pokus.cz DocumentRoot /var/www/pokus.cz/public_html # 设置PHP参数,memory_limit这类全局参数建议用PHP_ADMIN_VALUE SetEnv PHP_ADMIN_VALUE "memory_limit=64M" # 非全局参数可用PHP_VALUE # SetEnv PHP_VALUE "upload_max_filesize=20M" <Directory /var/www/pokus.cz/public_html> AllowOverride All Require all granted </Directory> # 指向默认FPM池的代理配置 <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/" </FilesMatch> </VirtualHost>
步骤3:重启服务
systemctl restart php-fpm systemctl restart httpd
验证配置是否生效
在虚拟主机根目录创建phpinfo.php文件:
<?php phpinfo(); ?>
访问http://pokus.cz/phpinfo.php,查找memory_limit项确认是否生效;如果用方法1,还能看到Pool项显示为pokus.cz。
内容的提问来源于stack exchange,提问作者Tomáš Novotný
相关产品推荐
相关产品推荐

