嗯.. 可能是 NGINX 或者我猜.. 我做得不太好。
关键是,我收到了一些来自此类机器人的请求:
91.123.1.56 - - [04/Apr/2016:12:13:39 +0200] "V\x5CxA1po\x5CxA9^\x5Cx8F\x5Cx90B\x5CxE1\x5CxDE\x5CxAC\x5CxE7\x5CxEE\x5Cx1DW\x5Cx1A\x5CxAC\x5CxA8L\x5Cx10\x5CxE4\x5CxCB\x5Cx84\x5CxEC\x5CxB2\x5CxE7\x5Cx90G\x5CxF35\x5CxC4+\x5CxD8\x5CxD8\x5Cx19\x5CxE8\x5Cx7F`\x5CxCF\x5CxE6\x5Cx075\x5Cx01kE\x5CxB7\x5CxAE{\x5CxC4\x5Cx0B\x5Cx82\x5CxB8*\x5CxA2\x5Cx03\x5CxFC\x5Cx89\x5CxA4\x5CxD99A\x5Cx80s" 400 166 "-" "-" "-"
重点是,如果可能的话,我希望 nginx 以 444 而不是 400 进行响应。
因此,为了首先尝试一下,我在主服务器块下写了一个新行(该块设置通过 IP 调用服务器时发生的情况)
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
if ($request ~* testrequest) {
return 444;
}
location / {
return 444;
}
location /status {
stub_status on;
access_log off;
allow 192.168.1.0/24;
deny all;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
以下行:
if ($request ~* testrequest) {
return 444;
}
首先有一个用于捕获 xYZ 字符的正则表达式,但是我发现它不起作用,所以我决定尝试一些更简单的东西(testrequest)
而且,如果我与服务器建立 telnet 连接(使用 IP,而不是任何服务器名称)并发出“testrequest”HTTP 请求,我仍然会收到 400 HTTP 响应。
我使用 $request 变量,因为它包含原始请求。
我也尝试将 IF 块放在位置 / 内,但没有效果,此外,我也觉得它有点毫无意义。
非常感谢大家的帮助。我知道 400 响应不必担心,但如果请求是恶意机器人之类的,我真的更愿意关闭连接。
提前致谢!