Nginxのファイルまたは場所へのアクセスをブロックする

Nginxのファイルまたは場所へのアクセスをブロックする

数週間前にnginxの実行を開始し、特定のファイル/場所へのアクセスをブロックする必要があります。たとえば、

/wordpress/wp-admin/
/wp-admin/
/test/wp-admin/
/hudson/login
/phpmyadmin/index.php
/mysql/index.php
/myadmin/index.php
/wp-cron.php
/xmlrpc.php

通常、/index.phpではなく、/wp-admin/、/test/wp-admin/、/wordpress/wp-admin/などのすべてのファイルに対する要求をブロックしようとしています。これらのファイル/場所は存在しないため、そのファイル/場所にアクセスする人は誰でもシステムをハッキング/乱用しようとします。

.htaccessApacheはこのようなことを防ぐために使用します。 Nginxでブロックする方法は?

現在の会議

server {
    listen       80;
    root /home/public_html;
    index index.php;
    server_name  domain.com;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    } 


    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
    }
}

ベストアンサー1

以下の設定では、nginxが404状態の「abuse」URLに応答し、デフォルトのnginx 404ページがnginxで終わる他のすべてのURLを、通常どおりプロキシを介して.phpapplication / phpエンジンに渡す必要があります。いくつかのモードをテストしましたが、アプリケーションではなくnginxで管理したいすべてのモードをテストする必要があります。/phpmyadmin/index.phpプロキシが通過する正規\.php表現の優先順位が高いように、URLのこの設定にはいくつかの問題がある可能性があると思いましたが、テストの結果、少なくとも私にとってはうまくいくことがわかりました。
そしてはい、位置ブロックがそんなに多くなければもっといいでしょうが、それをどのように実装するかは想像できませんね。

server {
    listen       80;
    root /home/public_html;
    index index.php;
    server_name  domain.com;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    } 


    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
    }

    # The ^~ means if this prefix pattern matches use this location block
    # and don't continue onto the regex location blocks - which would load
    # the laravel application
    location ^~ /wordpress/wp-admin/ {
        return 404;
    }
    location ^~ /wp-admin/ {
        return 404;
    }
    location ^~ /test/wp-admin/ {
        return 404;
    }
    location ^~ /hudson/login {
        return 404;
    }
    location ^~ /phpmyadmin/index.php {
        return 404;
    }
    location ^~ /mysql/index.php {
        return 404;
    }
    location ^~ /myadmin/index.php {
        return 404;
    }
    location ^~ /wp-cron.php {
        return 404;
    }
    location ^~ /xmlrpc.php {
        return 404;
    }

} 

おすすめ記事