Windows XAMPP Apache + PHP-FPM 完整部署配置手册

前置提醒:操作前完整备份网站、数据库、Apache配置文件;Windows下PHP-FPM和Linux教程差异很大,本套配置为TCP 9000端口方案,适配XAMPP。

一、环境说明

  • 系统: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
确认:proxy、proxy_fcgi、rewrite 三个模块必须加载,缺一不可。

三、修改 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
XAMPP控制面板不会自动启动FPM;每次重启服务器,需要先运行bat启动FPM,再在XAMPP面板启动Apache。
进阶:可以用NSSM把php-fpm注册成Windows系统服务,开机自启。

八、启动顺序与校验步骤

  1. 运行 start-fpm.bat,确认端口9000监听正常
  2. XAMPP面板启动Apache
  3. 访问phpinfo页面,确认 Server API = FPM/FastCGI(成功标志)
  4. 测试WordPress前台、后台、媒体上传、插件功能、伪静态链接
  5. 查看两个日志:Apache error.log 和 php-fpm.log,排查报错

九、回滚方案(切换失败一键恢复)

  1. 关闭FPM批处理窗口
  2. 恢复 httpd-xampp.conf 里面 php模块加载语句(取消注释)
  3. 注释 httpd.conf 中 proxy_fcgi_module
  4. 重启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

分享到:

用微信扫一扫,分享给朋友


发布日期:

所属分类: Apache/Nginx 标签: