Windows 下 Apache 2.4 使用代理转发 PHP 请求出现 No input file specified
问题描述
系统环境和软件版本:
- Windowns 10
- Apache httpd-2.4.41-win64-VS16
- php-7.4.5-nts-Win32-vc15-x64
尝试结合 Apache 2.4 的 proxy_module、proxy_fcgi_module 模块,将 php 的请求转发给 fCGI 后端处理。类似 Linux 系统 nginx 整合 php-fpm 的处理方式。
1. 添加模块
注释 httpd.conf 的2个模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so2. 增加配置
使用 Files 或者 FilesMatch 指令将 *.php 的请求代理到 proxy:fcgi://127.0.0.1:9000# 。
<Files ~ "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9000#"
</Files>3. 启用 php-cgi
在 cmd 窗口中,运行 php-cgi.exe -b 127.0.0.1:9000 -c php.ini 。
D:\develop\opt\php-7.4.5-nts>php-cgi.exe -b 127.0.0.1:9000 -c php.ini访问 http://localhost/test.php 时,出现错误
No input file specified.解决办法
在 Apache 2.4.23 以上,必须指定 ProxyFCGIBackendType ,即指定后端 FastCGI 应用程序的类型,有FPM 和 GENERIC 2个值可选,指定 GENERIC 即可。
在 httpd.conf 中,加多一行
ProxyFCGIBackendType GENERIC但是遗憾的是,这一方式至今只能在 php 7+ 上生效,本人测试了 php 5.6、php 5.5、php 5.4,不幸的是都出现了 No input file specified. 的错误。