502错误主因是iis未成功转发请求至php-cgi.exe,需检查cgi功能是否启用、php必须用nts版且路径指向php-cgi.exe、应用池标识设为localsystem、web.config中正确配置fastcgi环境变量并重启应用池。

502 错误不是 PHP 挂了,是 IIS 根本没把请求转过去
Windows 7 上用 IIS + FastCGI 跑 PHP 出现 502 Bad Gateway,大概率不是 PHP 代码报错,而是 IIS 和 php-cgi.exe 之间断连了。IIS 自己没崩(503 才是服务不可用),Kestrel 更不沾边(那是 .NET Core 的事),它只是“代理失败”——发出去的请求石沉大海,等超时后直接甩个 502 给浏览器。
排查重点不在 PHP 脚本,而在 IIS 是否真能唤起并维持住 php-cgi.exe 进程。常见现象包括:访问 info.php 时空白页、IIS 管理器里“处理程序映射”中 PHP 条目显示黄色感叹号、事件查看器里出现 FastCGI process exited unexpectedly。
检查 CGI 角色和 FastCgiModule 是否真的启用
IIS 安装时漏掉 CGI 功能,是 Win7 下 502 最隐蔽的根因。没有它,FastCgiModule 就不会加载,哪怕你手动加了 .php 映射,IIS 也根本识别不了这个模块。
- 打开“控制面板 → 程序和功能 → 启用或关闭 Windows 功能”,展开
Internet Information Services → Web 管理工具 → IIS 管理控制台,再确认World Wide Web 服务 → 应用程序开发功能 → CGI已勾选 - 打开 IIS 管理器 → 选中服务器节点 → 双击“模块”,看列表里是否有
FastCgiModule;没有就说明 CGI 没装对,重启后重装 - 命令行快速验证:
%windir%\system32\inetsrv\appcmd list module,输出里应含FastCgiModule
PHP 必须用 NTS 版本,且必须用 php-cgi.exe 启动
Win7 下很多人下载了线程安全版(TS)PHP,或者错误地把 php.exe(CLI 版)配进处理程序映射,结果就是进程秒退、502 频发。FastCGI 协议要求的是非线程安全(NTS)+ CGI 模式可执行文件。
- 去
https://windows.php.net/download/下载明确标注x64 Non-Thread-Safe或x86 Non-Thread-Safe的 ZIP 包(Win7 只支持 x86,别下错) - 处理程序映射里,“可执行文件”路径必须指向
php-cgi.exe,不是php.exe;例如:C:\php\php-cgi.exe - 应用池“高级设置 → 进程模型 → 标识”建议设为
LocalSystem(尤其 Win7 权限收紧时),否则常报Access is denied导致 cgi 进程无法启动
web.config 或 FastCGI 环境变量缺失导致进程闪退
Win7 默认不生成 web.config,但如果你手动生成了,又没配好 FastCGI 相关环境变量,php-cgi.exe 启动后可能立刻崩溃。IIS 不会报详细错误,只记一条“进程意外退出”。
- 在站点根目录放一个最小化
web.config,确保包含 FastCGI 变量声明(尤其PHP_FCGI_MAX_REQUESTS):
<configuration><system.webserver><fastcgi><application fullpath="C:\php\php-cgi.exe" maxinstances="4" idletimeout="300" instancemaxrequests="10000"><environmentvariables><environmentvariable name="PHP_FCGI_MAX_REQUESTS" value="10000"></environmentvariable></environmentvariables></application></fastcgi></system.webserver></configuration>
- 删掉所有无关的
<handlers></handlers>或<modules></modules>配置,避免干扰;Win7 IIS 7.5 对配置敏感度高,多写一行都可能触发 500.19 - 改完配置后,务必运行
iisreset或至少重启对应的应用程序池
Win7 的 IIS 7.5 缺少现代诊断能力,502 往往是最后表象,真正卡点常在 CGI 模块是否加载、php-cgi.exe 是否有权限读取 php.ini、以及 php.ini 里扩展路径(extension_dir)是否写错斜杠方向。这些细节不显眼,但每一步都可能让请求停在 IIS 门口。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











