Apache 2.4/PHP-FPM ProxyPassMatch 和访问限制

Apache 2.4/PHP-FPM ProxyPassMatch 和访问限制

我的 Apache/PHP 设置如下:https://wiki.apache.org/httpd/PHP-FPM

它包括ProxyPassMatch如下规则:

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/path/to/files/$1

这会将.php其中的所有请求发送到代理,最终为 PHP 提供服务。
但是,我一直在尝试进行一些访问控制,代理似乎优先。我的文件夹结构如下:

/             <-- PHP files
/extra/       <-- PHP files
/css/
/img/

应该可以访问根目录中的 PHP 文件,但我想限制对该extra目录的访问。我已将以下几行添加到我的主要配置中:

<Directory "/extra">
    Order deny,allow
    Deny from all
</Directory>

但是 PHP 文件仍然在执行...当我将不同类型的文件放入文件夹中时,它被成功阻止,因此该指令有效。我猜规则ProxyPassMatch禁止它对 PHP 文件起作用。

我尝试了一些方法,例如将规则放在块ProxyPassMatch<Directory>(不起作用,因为你不能ProxyPassMatch在这样的块内使用)并且ProxyPassMatchRewriteRule标志替换[P](类似于:Apache 2.4 + PHP-FPM + ProxyPassMatch,但没有得到代理)。

我的问题几乎和这个问题完全一样:http://www.gossamer-threads.com/lists/apache/users/417758不过,并未得到明确答复。

让我困惑的是,你需要设置代理规则,但当你设置它时,其他一切都变得无关紧要了(.htaccess 也不再起作用)。此外,这引发了安全性问题。其中的所有内容.php都不会受到我花哨的访问规定的影响,而是直接进入系统内部。我如何将 PHP-FPM 与 Apache 中的适当安全规则结合起来?

答案1

带有ProxyPassMatch .htaccess文件将被完全忽略。主配置文件中忽略的指令也可能会发生类似情况。

尝试使用FilesMatchSetHandler代替,如中所述2015 年回答您已链接的问题, 和这篇博文

答案2

将其放在 ProxyPassMatch 前面

ProxyPass /extra !

如果 ProxyPass 发现 /extra 是当前文件夹,则不会使用 ProxyPassMatch。重要的是行末的 !。

浏览此处获取更多信息: 代理通行证

答案3

这是一个老问题,但当我搜索使用ProxyPass和时对 Apache 进行访问控制的解决方案时,它就在第一页ProxyPassMatch。因此,它可能对从这里开始而不是从 Apache 的文档开始的其他人有所帮助。

解决方案是在代理声明下面包含一个部分:

<Proxy "*">
  Require ip 192.168
  Require host example.com
</Proxy>

这一切都按照mod_proxy 文档

相关内容