Red Hat 7.9下libphp.so、PHP80与HTTPD 2.4.56的兼容问题
解决Apache线程化MPM与PHP80模块冲突的启动报错问题
问题根源
你的编译版Apache启用了mpm_worker_module(线程化多处理模块),但Remi源提供的PHP80的libphp.so是非线程安全(NTS)版本,线程化MPM和非线程安全的PHP模块不兼容,所以启动时报错。而yum安装的Apache默认用的是非线程化的mpm_prefork_module,刚好适配NTS的PHP模块,所以能正常运行。
两种解决办法
办法一:把Apache的MPM换成prefork
- 找到Apache的MPM配置文件,一般是
/app/httpd/conf/extra/httpd-mpm.conf,也可能直接写在httpd.conf里 - 注释掉worker相关的配置块,打开prefork的配置:
# worker MPM配置,注释掉 # <IfModule mpm_worker_module> # StartServers 2 # MaxClients 150 # MinSpareThreads 25 # MaxSpareThreads 75 # ThreadsPerChild 25 # MaxRequestsPerChild 0 # </IfModule> # 启用prefork MPM <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> - 保存后重启Apache:
/app/httpd/bin/httpd -k restart
办法二:改用PHP-FPM模式(更推荐,性能更好)
如果不想改MPM,用FastCGI模式的PHP-FPM替代模块加载:
- 先在
httpd.conf里注释掉PHP模块加载的行:# LoadModule php_module modules/libphp.so - 启动Remi的PHP80-FPM服务:
systemctl start php80-php-fpm systemctl enable php80-php-fpm - 在Apache配置里加FastCGI转发规则(可以写在
httpd.conf或者虚拟主机配置文件中):
如果PHP-FPM监听的是9000端口,规则如下:
如果是监听套接字(路径一般是<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>/var/opt/remi/php80/run/php-fpm/www.sock),规则改成:<FilesMatch \.php$> SetHandler "proxy:unix:/var/opt/remi/php80/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> - 重启Apache生效:
/app/httpd/bin/httpd -k restart
内容的提问来源于stack exchange,提问作者Dreameyes86
相关产品推荐
相关产品推荐

