В моем журнале Nginx недавно я заметил 100 таких записей, в которых поиск в каталоге выполнялся с ошибкой, потому что этот каталог не существует на моем веб-сервере. теперь, как я могу заблокировать их, если они не смогли выполнить поиск в нескольких каталогах?
2015/06/29 09:33:54 [error] 23641#0: *1687 open() "/usr/share/nginx/html/section/wp-login.php" failed (2: No such file or directory), client: 116.58.246.226, server: localhost, request: "GET /section/wp-login.php HTTP/1.1", host: "blog.abcd.info"
2015/06/29 09:33:55 [error] 23641#0: *1687 open() "/usr/share/nginx/html/cms/wp-login.php" failed (2: No such file or directory), client: 116.58.246.226, server: localhost, request: "GET /cms/wp-login.php HTTP/1.1", host: "blog.abcd.info"
2015/06/29 09:33:56 [error] 23641#0: *1687 open() "/usr/share/nginx/html/site/wp-login.php" failed (2: No such file or directory), client: 116.58.246.226, server: localhost, request: "GET /site/wp-login.php HTTP/1.1", host: "blog.abcd.info"
2015/06/29 09:33:57 [error] 23641#0: *1687 open() "/usr/share/nginx/html/blog/wp-login.php" failed (2: No such file or directory), client: 116.58.246.226, server: localhost, request: "GET /blog/wp-login.php HTTP/1.1", host: "blog.abcd.info"
2015/06/29 09:33:58 [error] 23641#0: *1687 open() "/usr/share/nginx/html/admin/wp-login.php" failed (2: No such file or directory), client: 116.58.246.226, server: localhost, request: "GET /admin/wp-login.php HTTP/1.1", host: "blog.abcd.info"
1). Как правило, эти краулеры находят что-то вроде "admin.php" - вы можете собрать свою базу URL-адресов;) и заблокировать их.
2). Если вы хорошо понимаете, какие веб-приложения работают на вашем сервере и какие файлы они используют - вы можете запретить доступ ко всем php-файлам - они являются наиболее популярной целью поисковых роботов. И явно разрешить только Ваши файлы.
location =/index.php {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location =/custom.php {
# all other Your own scripts You may define such way, as this location
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ \.php$ {
access_log /path/to/log/nginx_deny.log name_log;
deny all;
}
Я задавал аналогичный вопрос несколько месяцев назад здесь :) и в конце нашел хороший способ. Более подробно вы можете посмотреть здесь: nginx - отклонить все запросы * .php кроме index.php по соображениям безопасности