web-dev-qa-db-ja.com

Apache 2.4 / PHP-FPMProxyPassMatchとアクセス制限

私は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を使用できないため、機能しません)、ProxyPassMatchの代わりにRewriteRule[P]に置き換えるなど、いくつか試してみました。フラグ(これに似ています: Apache 2.4 + PHP-FPM + ProxyPassMatch ですが、プロキシされませんでした)。

私の質問はこれとほとんど同じです: http://www.gossamer-threads.com/lists/Apache/users/417758 。しかし、それは決定的な答えを得ませんでした。

私を混乱させるのは、プロキシルールを設定する必要があるということですが、プロキシルールを設定すると、他に何も問題がないように見えます(.htaccessも機能しなくなります)。さらに、これはセキュリティについての疑問を提起します。 .phpが含まれているものはすべて、私の凝ったアクセス規定の影響を受けずに、システムの内部に直接送られます。 PHP-FPMをApacheの適切なセキュリティルールと組み合わせるにはどうすればよいですか?

2
kasimir

ProxyPassMatch.htaccessファイルは完全に無視されます。おそらく、メイン構成ファイルの無視されたディレクティブで同様のことが起こっています。

代わりにFilesMatchSetHandlerを使用してみてください。これは、 既にリンクした質問に対する2015年の回答 、および このブログ投稿 で説明されています。

1
Peter Nowee

これをProxyPassMatchの前に置きます

ProxyPass /extra !

ProxyPassが/ extraが現在のフォルダーであることを検出した場合、ProxyPassMatchは使用されません。重要なのは!行の終わりに。

詳細については、こちらを参照してください: ProxyPass

0
Marc Fauser

これは古い質問ですが、ProxyPassProxyPassMatchを使用してApacheのアクセス制御の解決策を検索したときの最初のページにあります。したがって、Apacheのドキュメントの代わりにここから始めた他の誰かを助けるかもしれません。

解決策は、プロキシ宣言の下にセクションを含めることです。

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

これはすべて mod_proxyドキュメント によるものです。

0
Sean Hogge