Apache 2.4 和 php-fpm 不会触发 php 页面的 apache http 基本身份验证

Yas*_*ash 2 php apache proxy fastcgi centos7

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

这是我的场景:

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

AuthType 基本

身份验证名称“测试”

AuthUserFile /etc/httpd/.test_pass

需要有效用户

.test_pass 已经通过 htpasswd 设置成功。通过浏览器或任何 html 文件访问 Web 根文件夹时,我会正确弹出身份验证。使用密码为我提供了预期的访问权限。

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

这是我的设置:

  • Apache 版本:2.4.6
  • php-fpm: PHP 5.4.16 (fpm-fcgi) 和 Zend Engine v2.4.0
  • 使用 proxy_fcgi_module (shared) 中的 proxypass 进行 apache 2.4 和 php-fpm 之间的通信
  • 另外我没有使用套接字连接,因为 apache 2.4.6 不支持它
  • 我的 proxypass 设置如下并且运行良好:ProxyPassMatch ^/(. .php(/. )?)$ fcgi://127.0.0.1:9000/var/www/html/$1

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

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

php-fpm 和 mod_proxy_fcgi 有变通方法/解决方案吗?

谢谢

Yas*_*ash 5

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

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

语法如下:

<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)