使用 mod-proxy-fcgi 和 php7.0-fpm 的基本身份验证失败

使用 mod-proxy-fcgi 和 php7.0-fpm 的基本身份验证失败

Ubuntu 16.04 LTS 在 AWS 实例上运行。Apache 2.4.18 / PHP7.0-fpm

问题出在 basic-auth 上。我正在尝试使用 pw-protect /var/www/html/admin//。我发现所有非 php 文件都受到保护 - 但 .php 文件似乎直接进入代理,而不应用基本身份验证并要求输入用户名/密码。

我尝试在 .conf 和 .htaccess 中插入 auth 指令。我尝试使用 Directory 和 Location 标签,但没有成功。我确实读到过 proxy-fcgi 没有传递 auth 标头,并建议强制使用

SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

但这并没有帮助(而且我的问题实际上不在于传递凭证 - 而在于首先让他们询问我。

这是代理指令:

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://localhost:9000/var/www/html/

我尝试过几种方式来表达基本身份验证...但只有一种:

    <Directory ~ "/var/www/[^/]+/[^/]+/admin/">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

我尝试过但没有成功的其他方法:

  • 重写身份验证标头,确保 .htpasswds 上的权限正确
    • 从 auth basic 更改为“拒绝所有”。它仍然允许 .php 文件

答案1

经过深入搜索后,我找到了解决方案。感谢 Yash 在此面板上的回答。据他所说,问题在于 proxypass 指令优先于 auth 指令,并在需要凭据之前将 .php 发送到代理。修复方法是在 filesMatch 指令中设置 Handler。这按预期工作。(请注意,我调整了 directorymatch 指令 - 但这与核心问题无关)。

<DirectoryMatch "/var/www/html/(admin|.+test)">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
</DirectoryMatch>

<Proxy "fcgi://localhost:9000/" enablereuse=on max=10>
</Proxy>

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

相关内容