需手动启动php-cgi.exe监听9000端口,nginx通过fastcgi_pass 127.0.0.1:9000转发请求;配置中必须设cgi.fix_pathinfo=0、正确设置extension_dir与script_filename路径,并启用openssl/curl/pdo_mysql/gd/mbstring/fileinfo扩展。

Windows 11 上用 Nginx 1.31.6 搭配 PHP 8.4.1 NTS 版本,核心是让 Nginx 通过 FastCGI 与 PHP-CGI 正确通信。整个过程不依赖 Apache 或 IIS,也不用安装服务管理器(如 nssm),纯手动配置即可稳定运行。
PHP 8.4.1 NTS 安装与基础配置
下载官方 PHP 8.4.1 Windows x64 Non-Thread Safe ZIP 包(VC17 编译),解压到 D:\php84(路径无空格、无中文)。
- 复制
php.ini-development为php.ini,用记事本或 VS Code 打开编辑 - 设置扩展路径:
extension_dir = "D:\php84\ext" - 启用必需扩展(取消分号):
extension=openssl、extension=curl、extension=pdo_mysql、extension=gd、extension=mbstring、extension=fileinfo - 关键安全项:
cgi.fix_pathinfo=0(必须设为 0,否则存在路径解析漏洞) - 时区与临时目录:
date.timezone = Asia/Shanghai,session.save_path = "D:\php84\session_temp",upload_tmp_dir = "D:\php84\upload_temp"(需手动创建这两个文件夹)
将 D:\php84 加入系统环境变量 PATH,重启终端后执行 php -v 和 php --ini 确认版本与配置文件加载路径正确。
Nginx 1.31.6 解压与最小化配置
从 nginx.org 下载 Windows 版 1.31.6,解压至 D:\nginx(同样避免中文和空格路径)。
- 确认目录结构含
nginx.exe、conf\nginx.conf、html\、logs\ - 用文本编辑器打开
conf\nginx.conf,修改http块内默认server:
→ 修改 root 指向你的网站根目录,例如:root D:/www;
→ 在 index 行末尾添加 index.php
→ 添加 PHP 路由规则(放在 location / 后面):
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
保存后,双击 D:\nginx\nginx.exe 启动;浏览器访问 http://localhost 应显示 Nginx 欢迎页。
启动 PHP-CGI 并验证通信
Nginx 不直接执行 PHP,需单独启动 PHP-CGI 进程监听端口:
- 打开命令行,进入
D:\php84 - 执行:
php-cgi.exe -b 127.0.0.1:9000 -c php.ini - 窗口保持运行(不要关闭),表示 PHP-CGI 已就绪并监听 9000 端口
在 D:\www 下新建 info.php,内容为:<?php phpinfo(); ?>。刷新 http://localhost/info.php,若页面完整显示 PHP 8.4.1 信息(尤其确认 Server API 显示为 CGI/FastCGI),说明 Nginx 与 PHP 已成功对接。
常见问题快速定位
出现 502 Bad Gateway:检查 PHP-CGI 是否正在运行、端口是否被占用(netstat -ano | findstr :9000)、fastcgi_pass 地址是否一致。
页面空白或下载 PHP 文件:确认 location ~ \.php$ 规则已添加且未被其他 location 覆盖;检查 SCRIPT_FILENAME 参数拼写及路径斜杠方向(Windows 推荐用正斜杠或双反斜杠)。
mysqli 扩展报错:确保已启用 extension=mysqli 和 extension=pdo_mysql;若连接 MySQL 8.0+ 提示认证失败,需在数据库中执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











