我正在尝试使用 mod_proxy_fcgi 从 mod_php 转移到 php-fpm。
安装所需的模块后,我尝试按照安装过程中收到的通知进行操作:
默认情况下不启用 PHP 7.2 FPM。
要在 Apache2 中启用 PHP 7.2 FPM,请执行以下操作:
a2enmod proxy_fcgi setenvif
a2enconf php7.2-fpm
完成此操作并重新启动 Apache 后,我的网站以纯文本形式向我提供 php 文件。
仅在添加Include conf-enabled/php7.2-fpm.conf
到我的虚拟主机配置文件后(设置 letsencrypt 后,我的所有虚拟主机都有两个,并且必须将其添加到两者中)。
我有点不愿意这样做 - 将来php7.2-fpm.conf
可能会转移到php7.3-fpm.conf
并且我必须再次添加触摸所有配置文件。
这是的内容php7.2-fpm.conf
:
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default To re-enable it's recommended to enable access to the
# files only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(ar|p|ps|tml)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule>
所以我想知道是否有办法在不触及所有虚拟主机配置文件的情况下改变 php-fpm 机制的工作行为?
答案1
我认为您必须仅使用虚拟主机中的 ExecCGI 选项。
例子:
<VirtualHost *:80>
DocumentRoot /var/www/html
Protocols h2 h2c http/1.1
<Directory /var/www/html>
Options -Indexes +FollowSymLinks +MultiViews +ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>