Ответ 1
Необъяснимо, простое изменение конечного /
на #
похоже на проблему:
<Files ~ "\.(php|phtml)$">
SetHandler "proxy:fcgi://127.0.0.1:9000#"
</Files>
В попытке понять это я установил Apache в LogLevel debug
(временная метка/модуль/данные процесса удалены для краткости):
-
Использование
/
дает:mod_proxy_fcgi.c(911): [client ::1:60730] AH01076: url: fcgi://127.0.0.1:9000/E:/test/webroot/test.php proxyname: (null) proxyport: 0 mod_proxy_fcgi.c(920): [client ::1:60730] AH01078: serving URL fcgi://127.0.0.1:9000/E:/test/webroot/test.php proxy_util.c(2154): AH00942: FCGI: has acquired connection for (*) proxy_util.c(2208): [client ::1:60730] AH00944: connecting fcgi://127.0.0.1:9000/E:/test/webroot/test.php to 127.0.0.1:9000 proxy_util.c(2417): [client ::1:60730] AH00947: connected /E:/test/webroot/test.php to 127.0.0.1:9000
-
Использование
#
дает:mod_proxy_fcgi.c(911): [client ::1:60738] AH01076: url: fcgi://127.0.0.1:9000#E:/test/webroot/test.php proxyname: (null) proxyport: 0 mod_proxy_fcgi.c(920): [client ::1:60738] AH01078: serving URL fcgi://127.0.0.1:9000#E:/test/webroot/test.php proxy_util.c(2154): AH00942: FCGI: has acquired connection for (*) proxy_util.c(2208): [client ::1:60738] AH00944: connecting fcgi://127.0.0.1:9000#E:/test/webroot/test.php to 127.0.0.1:9000 proxy_util.c(2417): [client ::1:60738] AH00947: connected to 127.0.0.1:9000
Важное различие, по-видимому, находится в последней строке, где второй (рабочий) метод не отображает ничего как значение, переданное процессу PHP.
Я затрудняюсь это объяснить и не могу найти упоминания об этом в любом месте. (Возможно, более смелая душа, чем я был бы готов вникать в источник Apache и/или PHP для исследования.)
Обратите внимание, что я не тестировал это за пределами phpinfo()
, поэтому не рекомендовал бы его для производственного сервера.
Edit
Это работает для PHP 7.0, но с PHP 5.6 я все еще получаю ошибку "Нет входного файла".
Изменить 2
И работа с Apache 2.4.25, но не недавно выпущенный 2.4.26!
Это похоже на минное поле несовместимости, которое явно упоминается в файле CHANGES_2.4.26:
mod_proxy_fcgi: вернитесь к 2.4.20-и-более раннему поведению ухода префикс "proxy: fcgi://" в переменной среды SCRIPT_FILENAME по умолчанию. Добавьте ProxyFCGIBackendType, чтобы разрешить тип бэкэнд что эти типы исправлений могут быть восстановлены без FPM. PR60576 [Эрик Ковенер, Джим Ягельский]
Документация была обновлена, чтобы отразить это:
Одним из примеров значений, которые изменяются в зависимости от настройки этой директивы, является SCRIPT_FILENAME. При использовании mod_proxy_fcgi исторически SCRIPT_FILENAME имеет префикс строки "proxy: fcgi://". Эта переменная - это то, что некоторые общие приложения FastCGI читают как их вход script, но PHP-FPM лишит префикс, а затем помнит, что он разговаривал с Apache. В 2.4.21 - 2.4.25 этот префикс был автоматически лишен сервером, нарушив способность PHP-FPM обнаруживать и взаимодействовать с Apache в некоторых сценариях.