一、环境说明
- 系统:Windows Server / Windows 10/11
- Web:Apache 2.4(XAMPP自带)
- 通信方式:TCP 127.0.0.1:9000(Windows不支持unix socket)
- 适用:WordPress、PHP站点,搭配Proxy-FCGI
二、修改 httpd.conf(C:/xampp/apache/conf/httpd.conf)
开启模块,找到对应行,取消注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
三、修改 httpd-xampp.conf(关键!关闭mod_php)
找到加载php模块的行,注释掉,示例(根据你的PHP版本):
#LoadModule php8_module "C:/xampp/php/php8apache2_4.dll"
#<FilesMatch "\.php$">
# SetHandler application/x-httpd-php
#</FilesMatch>
不注释会出现双PHP处理器冲突,直接500报错。
四、PHP-FPM 配置文件(C:/xampp/php/etc/php-fpm.conf)
[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = warning
include = etc/php-fpm.d/*.conf
五、进程池配置 www.conf(C:/xampp/php/etc/php-fpm.d/www.conf)
[www]
listen = 127.0.0.1:9000
listen.backlog = 2048
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 20
pm.start_servers = 6
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 2000
; 这里设置PHP参数,替代htaccess里的php_value
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 64M
php_admin_value[post_max_size] = 64M
php_admin_value[max_execution_time] = 120
- pm.max_requests = 2000:PHP子进程处理2000请求自动重建,内存回收,和Apache的MaxConnectionsPerChild逻辑类似
- pm.max_children:最大同时运行php进程,根据服务器内存调整,不要盲目开大
- php_admin_value:FPM模式下在这里定义PHP配置,htaccess中的php_value全部失效
六、虚拟主机配置 httpd-vhosts.conf(WordPress站点示例)
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/yourwp"
ServerName shturl.cc/Ojw4
ServerAlias www.shturl.cc/Ojw4
<Directory "C:/xampp/htdocs/yourwp">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# PHP请求转发给FPM,保留WP伪静态兼容性
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
ErrorLog "logs/yourdomain-error.log"
CustomLog "logs/yourdomain-access.log" combined
</VirtualHost>
七、Windows 启动批处理 start-fpm.bat(放在C:/xampp/php/)
@echo off
cd /d C:\xampp\php
php-cgi.exe -b 127.0.0.1:9000
pause
进阶:可以用NSSM把php-fpm注册成Windows系统服务,开机自启。
八、启动顺序与校验步骤
- 运行 start-fpm.bat,确认端口9000监听正常
- XAMPP面板启动Apache
- 访问phpinfo页面,确认 Server API = FPM/FastCGI(成功标志)
- 测试WordPress前台、后台、媒体上传、插件功能、伪静态链接
- 查看两个日志:Apache error.log 和 php-fpm.log,排查报错
九、回滚方案(切换失败一键恢复)
- 关闭FPM批处理窗口
- 恢复 httpd-xampp.conf 里面 php模块加载语句(取消注释)
- 注释 httpd.conf 中 proxy_fcgi_module
- 重启Apache,回到原来mod_php模式
十、常见问题清单
| 现象 | 原因 |
|---|---|
| 访问PHP页面503 Service Unavailable | FPM没有启动,9000端口未监听 |
| 页面空白、无报错 | php.ini display_errors 关闭,查看php-fpm.log |
| htaccess里设置的内存限制不生效 | FPM模式不识别php_value,迁移到www.conf的php_admin_value |