我面临以下已安装并启用的旧php-7.4
设置libapache2-mod-php7.4
:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
/var/www/html/project1
-> Apache 2.0 处理程序 / PHP 7.4 ->example.com/project1
/var/www/html/project2
-> Apache 2.0 处理程序 / PHP 7.4 ->example.com/project2
我是公司新人,现在必须实现/var/www/html/project3
,可通过 访问example.com/project3
。旧项目无法在较新的 PHP 版本上运行,但我喜欢project3
在较新的 PHP 8.2 上运行。因此,我想到安装并让 Apache 仅处理通过php8.2-fpm
的请求。/var/www/html/project3
SetHandler [...]php8.2-fpm.sock
参见上面代码片段的注释,了解我是如何尝试实现这一点但没有成功的:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
# This works, but sets php8.2-fpm globally for the whole /var/www/html directory
# this breaks project1 and project2
<FilesMatch \.php$>
SetHandler proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://dummy
</FilesMatch>
# This has no effect at all (but I guess my intent is clear)
<Directory /var/www/html/project3>
<FilesMatch \.php$>
SetHandler proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://dummy
</FilesMatch>
</Directory>
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我考虑过使用另一个VirtualHost
不同的方法DocumentRoot
,但我有两个要求让我相信我必须使用VirtualHost
与遗留项目相同的方法:
- 最终 URL 必须与旧项目的类型相同(
example.com/project3
) - 由于 CI/CD,项目的位置必须是
/var/www/html/project3
。我唯一能做的就是在文件系统的其他地方放置一个符号链接
因此,如果您知道如何在现有定义中解决这个问题,或者能帮我提供一个满足两个要求+设置处理程序的VirtualHost
解决方案,我将不胜感激。VirtualHost
php-fpm