web-dev-qa-db-ja.com

Nginxロケーションブロックは、その中の.phpファイルに適用されませんか?

したがって、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;
    }
}
4
Nathaniel Suchy

ほとんどの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;
    }
}
6
Richard Smith