したがって、phpmyadminインストールに対するブルートフォース攻撃を防ぐために、nginxをHTTP基本認証(追加のユーザー名とパスワード)を要求するように構成し、リクエストはホワイトリストに登録されたIPアドレスから送信される必要があります。ただし、IPアドレスホワイトリストは https://example.com/phpmyadmin/ を実行すると正常に機能しますが、追加の.phpブロックを追加せずに https://example.com/ phpmyadmin/index.php IPがホワイトリストに登録されていません。この問題は、HTTP基本認証には影響しません。これが起こる理由はありますか?とにかく余分な.phpブロックを追加する必要を回避するには? phpmyadminの設定領域のコピーを以下に示します。
# Setup and secure phpMyAdmin
location /phpmyadmin/ {
allow 1.2.3.4;
deny all;
auth_basic "phpMyAdmin - HTTP Basic Login";
auth_basic_user_file /etc/nginx/pma_pass;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
allow 1.2.3.4;
deny all;
}
}
ほとんどのPHP構成では、location ~ \.php$
で終わるURIを処理する.php
ブロックが1つあるため、他のlocation
ブロックに制限を追加すると、関連する静的ファイルに影響します。詳細は このドキュメント を参照してください。
最もクリーンな解決策は、^~
修飾子を使用してプレフィックスの場所を使用することです。これにより、/phpmyadmin/
で始まるすべてのURIがそのブロックによって処理され、他のlocations
がトップレベルで処理されます。セキュリティをバイパスしないでください。詳細は このドキュメント を参照してください。
発見したように、ネストされたlocation
を追加して、そのブロック内でPHPを処理する必要がありますが、認証ステートメントはすべて継承される必要があり、内部ブロック。
例えば:
location ^~ /phpmyadmin/ {
allow 1.2.3.4;
deny all;
auth_basic "phpMyAdmin - HTTP Basic Login";
auth_basic_user_file /etc/nginx/pma_pass;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}