IIS HTTP 502.2 Bad Gateway: сбои FastCGI и CGI — решение
Симптомы ошибки IIS 502.2
При открытии веб-приложений на базе PHP, Python или Perl в браузере появляется ошибка: HTTP Error 502.2 - Bad Gateway: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return were ''.
| Симптом | Где проявляется | Причина |
|---|---|---|
| HTTP 502.2 при тяжелых операциях | PHP / FastCGI приложения | Процесс php-cgi.exe аварийно упал (Crash) или завершился по таймауту |
| Пустой ответ от бэкенда | Браузер клиента | Интерпретатор завершился без отправки HTTP-заголовков Content-Type |
| Event ID 1000 (Application Crash) | Журнал Application | Сбой в стороннем модуле или библиотеке |
Пошаговое устранение сбоя FastCGI (HTTP 502.2)
- Увеличьте таймауты выполнения FastCGI (Activity Timeout и Request Timeout):
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set config -section:system.webServer/fastCgi /[fullPath='C:\PHP\php-cgi.exe'].activityTimeout:300 /commit:apphost; & "$env:SystemRoot\System32\inetsrv\appcmd.exe" set config -section:system.webServer/fastCgi /[fullPath='C:\PHP\php-cgi.exe'].requestTimeout:300 /commit:apphost - Проверьте прямой запуск интерпретатора из консоли: проверьте синтаксис и библиотеки:
cd C:\PHP; .\php.exe -v; .\php.exe -m - Установите необходимые пакеты Visual C++: скачайте и установите актуальные Microsoft Visual C++ Redistributable (x64 / x86).
- Настройте логирование ошибок в php.ini: задайте
display_errors = Off,log_errors = On,error_log = "C:\inetpub\logs\php_errors.log",max_execution_time = 300.
Совет: Всегда используйте сборку PHP версии Non-Thread Safe (NTS) x64 для работы под управлением IIS FastCGI. Thread-Safe сборки предназначены для Apache и работают под IIS нестабильно.
Частые вопросы (FAQ)
Почему PHP под IIS должен быть Non-Thread Safe (NTS)?
Модуль FastCGI в IIS является однопоточным диспетчером процессов. Версия NTS оптимизирована для такой архитектуры и обеспечивает максимальную производительность без блокировок.
Как понять, какой именно PHP-файл вызвал ошибку 502.2?
Включите функцию 'Трассировка неудачных запросов' (Failed Request Tracing — FREB) в IIS Manager для кода ответа 502.2.
Что делать, если в логе падает модуль php_opcache.dll?
Увеличьте параметр opcache.memory_consumption в php.ini или временно отключите OPcache для проверки.
Где настроить сопоставление обработчиков FastCGI в IIS?
В консоли IIS Manager выберите сервер -> 'Сопоставления обработчиков' (Handler Mappings) -> модуль FastCgiModule.