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.so
2. 增加配置
使用 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.
的错误。