服务器上已安装的相关软件包:
php php-cli php-common php-opcache php-mcrypt php-gd php-curl php-fpm php-dom php-intl php-pecl-mongodb php-mbstring php-xml php-pear php-devel php-pecl-zip
Centos 7 Apache/httpd
背景故事:
我们正在从旧服务器迁移到新服务器,因为现在我们终于有时间重新配置一切。在旧服务器上,一切都正常,但缺少一些可以提升性能的功能。其中之一就是 php-fpm。现在新服务器配置几乎完成了,只缺少与自动部署工具和 php-fpm 的连接。所以我按照以下教程安装了 php-fpm:
https://www.webhostinghero.com/centos-apache-php-fpm/
https://www.mynotepaper.com/install-latest-php-php-fpm-on-centos-7/
https://www.stephenrlang.com/2018/02/centos-7-apache-2-4-with-php-fpm/
这些是谷歌上关于这个主题的前 3 个结果,我对这整件事有点厌倦了,因为我已经花了 2 个月的时间来完成整个配置,现在我真的很想完成它。问题是上面的这些都不起作用。
什麼是有效?
嗯,httpd 运行正常。php-fpm 也有一个服务,它似乎在监听端口 9000。所以第一个问题是我不太确定我该如何确定它是否在工作。正如我所说,httpd 和 php-fpm 的服务都很好。还添加到自动启动
我该如何尝试找出它是否有效?
好吧,phpinfo 是最受欢迎的,但我的问题是我不想将配置公之于众。我们已经在服务器上尝试过入侵,但都没有成功,所以最好保持安全。第二个选项是php -i | grep "Server API"
应该返回这个 - 考虑到教程:“FPM/fastCGI”,它返回“命令行界面”
我认为这可能意味着它不起作用。是真的吗?
我到目前为止做了什么?
我/etc/php.ini
有此行,正如教程中所建议的那样:cgi.fix_pathinfo=0
然后这里/etc/php-fpm.d/www.conf
user = apache
group = apache
listen.owner = apache
listen.group = apache
listen = /var/run/php-fpm/default.sock
然后这里/etc/httpd/conf.modules.d/00-mpm.conf
而不是这个:LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
我有这个:
LoadModule mpm_event_module modules/mod_mpm_event.so
然后这里/etc/httpd/conf.d/php.conf
# Proxy declaration
<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
# we must declare a parameter in here (doesn't matter which) or it'll not register the proxy ahead of time
ProxySet disablereuse=off
</Proxy>
# Redirect to the proxy
<FilesMatch \.php$>
SetHandler proxy:fcgi://php-fpm
</FilesMatch>
加上一些默认的东西。这些都是从我上面链接的描述中得到的
配置完成后,每次都会重新加载服务,但得到的结果都一样。所以我不知道缺少什么才能让它工作——主要是因为这是我第一次在 apache 中使用 php-fpm。
网站仍在运行,但是这个 fpm 东西却无法运行。
有任何想法吗?
答案1
“有任何想法吗?”
也许与所需的 a2enmod、a2enconf 和 a2dismod 命令有关?当我在 apache 2.4 上切换到 php7.3-fpm 时,我必须执行以下操作(这是在 debian 10 和 ubuntu 18.04 上):
sudo systemctl stop apache2
sudo apt-get install php7.3-fpm
a2enmod proxy_fcgi setenvif
a2enconf php7.3-fpm # this may depend on your PHP vendor
a2dismod php7.3 # This disables mod_php.
a2dismod mpm_prefork # This disables the prefork MPM. Only one MPM can run at a time.
a2enmod mpm_event # Enable event MPM. You could also enable mpm_worker.
sudo systemctl restart apache2
执行sudo apachectl -M
并查找这些模块:
http2_module (shared)
mpm_event_module (shared)
proxy_module (shared)
proxy_fcgi_module (shared)