Apache 2.4 和 php-fpm 不会为 php 页面触发 apache http basic auth


Apache 2.4 and php-fpm does not trigger apache http basic auth for php pages

我相信这是一个在某处被问过的问题,如果是这样,对不起,但谷歌搜索并没有给我任何有形的东西。

这是我的方案:

我正在使用apache http基本身份验证保护Web目录。所以我在根文件夹中有我的 .htaccess,我的 httpd.conf 被配置为覆盖所有内容,以便它考虑 .htaccess。我的.htaccess的内容如下:

身份验证类型基本

身份验证名称"测试"

AuthUserFile/etc/httpd/.test_pass

需要有效用户

.test_pass已成功与htpasswd建立。通过浏览器或任何html文件访问Web根文件夹时,我正确弹出身份验证弹出窗口。使用密码给了我预期的访问权限。

但是当我访问 php 页面时,身份验证弹出窗口没有出现,并且 php 页面呈现。

这是我的设置:

  • 阿帕奇版本:2.4.6
  • php-fpm: PHP 5.4.16 (fpm-fcgi) with Zend Engine v2.4.0
  • 使用来自proxy_fcgi_module(共享)的代理传递进行通信在 Apache 2.4 和 PHP-FPM 之间
  • 我也没有使用套接字连接,因为 apache 2.4.6 没有支持它
  • 我的代理通行证设置如下,效果很好:ProxyPassMatch ^/(..php(/.)?$fcgi://127.0.0.1:9000/var/www/html/$1

我需要能够通过 apache 基本身份验证设置用户名/密码身份验证,以保护目录中的每个文件,包括 php 文件。

我正在使用开源软件;因此修改软件代码是最后的手段。

是否有针对php-fpm和mod_proxy_fcgi的解决方法/解决方案?

谢谢

经过数小时的研究,我明白发生这种情况的原因是因为 ProxyPassMatch 指令是要处理的第一个指令,这会导致 apache 忽略.php扩展的其他指令。

为了能够通过 php-fpm 使用其他 apache 指令proxy_fcgi_module应该使用 filesmatch 指令而不是 proxypassmatch。

语法如下:

<FilesMatch '.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>