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目录。 我已经将这些行添加到我的主要configuration:

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

但PHP文件仍然执行…当我把一个不同types的文件在文件夹中,它被成功阻止,所以指令工程。 我猜ProxyPassMatch规则是禁止它为PHP文件工作。

我已经尝试了一些东西,比如将ProxyPassMatch规则放在一个<Directory>块中(不起作用,因为你不能在这样的块中使用ProxyPassMatch )并用[P]标志replaceProxyPassMatch来写一个RewriteRule (类似于这个: Apache 2.4 + PHP-FPM + ProxyPassMatch ,但是没有被代理)。

我的问题几乎和这个一样: http : //www.gossamer-threads.com/lists/apache/users/417758 。 然而,它没有得到明确的答案。

让我感到困惑的是你需要有代理规则,但是当你把它放进去的时候,没有其他东西似乎很重要(.htaccess也不能工作了)。 此外,这提出了有关安全的问题。 所有带.php东西都没有受到我想象的访问规定的影响,直接进入系统的内部。 如何将PHP-FPM与Apache中正确的安全规则结合起来?

把它放在你的ProxyPassMatch前面

 ProxyPass /extra ! 

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

在这里看到更多的信息: ProxyPass

使用ProxyPassMatch .htaccess文件将被完全忽略。 类似的东西可能与主configuration文件中被忽略的指令有关。

请尝试使用FilesMatchSetHandler ,如2015年对已经链接到的问题的回答中所述 ,以及此博客文章 。