将 php-fpm 限制到通常由 apache 处理的特定子目录中

将 php-fpm 限制到通常由 apache 处理的特定子目录中

我面临以下已安装并启用的旧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/project3SetHandler [...]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与遗留项目相同的方法:

  1. 最终 URL 必须与旧项目的类型相同(example.com/project3
  2. 由于 CI/CD,项目的位置必须是/var/www/html/project3。我唯一能做的就是在文件系统的其他地方放置一个符号链接

因此,如果您知道如何在现有定义中解决这个问题,或者能帮我提供一个满足两个要求+设置处理程序的VirtualHost解决方案,我将不胜感激。VirtualHostphp-fpm

相关内容