NGINX 无法识别 $request

NGINX 无法识别 $request

嗯.. 可能是 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 响应不必担心,但如果请求是恶意机器人之类的,我真的更愿意关闭连接。

提前致谢!

相关内容