私は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の適切なセキュリティルールと組み合わせるにはどうすればよいですか?
ProxyPassMatch
.htaccess
ファイルは完全に無視されます。おそらく、メイン構成ファイルの無視されたディレクティブで同様のことが起こっています。
代わりにFilesMatch
とSetHandler
を使用してみてください。これは、 既にリンクした質問に対する2015年の回答 、および このブログ投稿 で説明されています。
これをProxyPassMatchの前に置きます
ProxyPass /extra !
ProxyPassが/ extraが現在のフォルダーであることを検出した場合、ProxyPassMatchは使用されません。重要なのは!行の終わりに。
詳細については、こちらを参照してください: ProxyPass
これは古い質問ですが、ProxyPass
とProxyPassMatch
を使用してApacheのアクセス制御の解決策を検索したときの最初のページにあります。したがって、Apacheのドキュメントの代わりにここから始めた他の誰かを助けるかもしれません。
解決策は、プロキシ宣言の下にセクションを含めることです。
<Proxy "*">
Require ip 192.168
Require Host example.com
</Proxy>
これはすべて mod_proxyドキュメント によるものです。