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

Posted

技术标签:

【中文标题】Apache 2.4 和 php-fpm 不会为 php 页面触发 apache http 基本身份验证【英文标题】:Apache 2.4 and php-fpm does not trigger apache http basic auth for php pages 【发布时间】:2015-05-16 00:39:17 【问题描述】:

我确信这是在某个地方被问过的问题,如果是这样,请原谅,但谷歌搜索并没有给我任何切实的信息。

这是我的场景:

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

基本身份验证

AuthName“测试”

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(共享)的 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 是否有变通/解决方案?

谢谢

【问题讨论】:

【参考方案1】:

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

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

语法如下:

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

【讨论】:

以上是关于Apache 2.4 和 php-fpm 不会为 php 页面触发 apache http 基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章

403 禁止,仅限 CakePHP - PHP-FPM - Apache 2.4 和 mod_proxy_fcgi

如何在centos 7上执行html文件(php-fpm和apache 2.4)中的php代码

Apache 2.4 + php-fpm - AH01071:出现错误“主脚本未知\n”mod_proxy_balancer

apache nginx 性能简单对比测试

Apache 的不同 Php-Fpm 容器

Apache 的不同 Php-Fpm 容器