如何在nginx配置中阻止特定的用户代理

lor*_*uga 3 nginx

如何使用nginx阻止用户代理.到目前为止我有这样的事情:

if ($http_user_agent = "Mozilla/5.0 (Linux; Android 4.2.2; SGH-M919 Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22") {
return 403;}
Run Code Online (Sandbox Code Playgroud)

这是来自此堆栈溢出的类似线程.

我运行nginx作为cherrypy服务器的反向代理.我打算单独使用nginx过滤某个用户代理,但上面的代码在我的服务器上不起作用.

这是正确的方法吗?它没有包含在nginx配置中的任何块中.我应该将它添加到"http"块还是"服务器"块

Stu*_*all 9

如果是邪恶的- 使用该map指令。

请参阅Nginx Ultimate Bad Bot Blocker

  • 1. 如果只是在位置上下文中是邪恶的。此处不适用,这是在服务器级别。2. 即使在位置上下文中,返回 403 也是 100% 安全的。所以这显然是 if 的非恶意使用。 (9认同)
  • 引入依赖可能比偶尔小心地使用一些棘手的东西要邪恶得多。尤其是那些如此巨大和复杂但不为人所知的东西。那些11步的“简易配置说明”看起来一点也不简单。 (5认同)

lor*_*uga 6

为了阻止特定的用户代理,我在"服务器"块中包含了这个代码:

if ($http_user_agent = "Mozilla/5.0 (Linux; Android 4.2.2; SGH-M919 Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22"){
    return 403;
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作.

  • 考虑返回 444。这是一个自定义的 nginx 代码,会在没有响应的情况下断开连接。 (8认同)