如何在Ubuntu Apache2环境下为各站点单独配置PHP指令?
实现Ubuntu Apache2+PHP多站点独立配置参数方案
根据你提到的PHP_INI模式和需求,下面分两种常见的Apache+PHP部署场景给出具体实现方法:
一、PHP以Apache模块(mod_php)运行时
这种场景下可直接在Apache虚拟主机配置中单独设置站点参数,优先级高于全局php.ini。
1. 编辑站点Apache配置文件
每个站点的配置文件位于/etc/apache2/sites-available/目录下,比如sitea.conf、siteb.conf,编辑对应文件的<VirtualHost>块:
sitea.com配置示例
<VirtualHost *:80> ServerName sitea.com DocumentRoot /var/www/sitea/public_html # 上传参数配置 php_value upload_max_filesize 50M php_value max_file_uploads 20 # PHP_INI_SYSTEM级别的参数需用php_admin_value php_admin_value upload_tmp_dir /var/www/sitea/tmp_uploads # 唯一session名称 php_value session.name SITEA_SESSID # 其他常规配置(日志、权限等) ErrorLog ${APACHE_LOG_DIR}/sitea.error.log CustomLog ${APACHE_LOG_DIR}/sitea.access.log combined </VirtualHost>
siteb.com配置示例
<VirtualHost *:80> ServerName siteb.com DocumentRoot /var/www/siteb/public_html php_value upload_max_filesize 5M php_value max_file_uploads 10 php_admin_value upload_tmp_dir /var/www/siteb/tmp_uploads php_value session.name SITEB_SESSID ErrorLog ${APACHE_LOG_DIR}/siteb.error.log CustomLog ${APACHE_LOG_DIR}/siteb.access.log combined </VirtualHost>
2. 创建并配置专属临时上传目录
# 创建目录 sudo mkdir /var/www/sitea/tmp_uploads /var/www/siteb/tmp_uploads # 设置权限(确保PHP进程可读写) sudo chown www-data:www-data /var/www/sitea/tmp_uploads /var/www/siteb/tmp_uploads sudo chmod 700 /var/www/sitea/tmp_uploads /var/www/siteb/tmp_uploads
3. 生效配置
sudo systemctl restart apache2
二、PHP以FPM(FastCGI Process Manager)运行时
这种场景下推荐为每个站点创建独立的FPM池,实现完全隔离的PHP配置。
1. 创建站点专属FPM池配置
FPM池配置位于/etc/php/[你的PHP版本]/fpm/pool.d/目录下,比如sitea.conf:
sitea.com池配置示例
[sitea] user = www-data group = www-data listen = /run/php/php8.2-fpm-sitea.sock 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 # PHP参数配置 php_admin_value[upload_max_filesize] = 50M php_admin_value[max_file_uploads] = 20 php_admin_value[upload_tmp_dir] = /var/www/sitea/tmp_uploads php_admin_value[session.name] = SITEA_SESSID
siteb.com池配置示例
[siteb] user = www-data group = www-data listen = /run/php/php8.2-fpm-siteb.sock 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 php_admin_value[upload_max_filesize] = 5M php_admin_value[max_file_uploads] = 10 php_admin_value[upload_tmp_dir] = /var/www/siteb/tmp_uploads php_admin_value[session.name] = SITEB_SESSID
2. 配置Apache关联对应FPM池
编辑站点的Apache配置文件,添加PHP文件的FPM处理规则:
sitea.com Apache配置示例
<VirtualHost *:80> ServerName sitea.com DocumentRoot /var/www/sitea/public_html # 关联FPM池 <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.2-fpm-sitea.sock|fcgi://localhost/" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/sitea.error.log CustomLog ${APACHE_LOG_DIR}/sitea.access.log combined </VirtualHost>
siteb.com的配置只需替换sock路径为/run/php/php8.2-fpm-siteb.sock即可。
3. 创建临时上传目录(同mod_php步骤)
sudo mkdir /var/www/sitea/tmp_uploads /var/www/siteb/tmp_uploads sudo chown www-data:www-data /var/www/sitea/tmp_uploads /var/www/siteb/tmp_uploads sudo chmod 700 /var/www/sitea/tmp_uploads /var/www/siteb/tmp_uploads
4. 生效配置
sudo systemctl restart php8.2-fpm sudo systemctl restart apache2
三、参数与PHP_INI模式对应说明
| 参数 | PHP_INI模式 | 可配置方式 |
|---|---|---|
| upload_max_filesize | PHP_INI_PERDIR | Apache配置、.user.ini、FPM池配置 |
| max_file_uploads | PHP_INI_PERDIR | Apache配置、.user.ini、FPM池配置 |
| upload_tmp_dir | PHP_INI_SYSTEM | Apache配置(php_admin_value)、FPM池配置、php.ini |
| session.name | PHP_INI_ALL | 所有配置方式(含代码中ini_set()) |
四、验证配置生效
在每个站点根目录创建phpinfo.php文件:
<?php phpinfo(); ?>
访问该文件,查找对应参数值,确认是否符合配置要求。
内容的提问来源于stack exchange,提问作者Norman
相关产品推荐
相关产品推荐

