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