相對於 Apache,Nginx 佔用的系統資源更少,更適合 VPS 使用。惡意的 User Agent 無處不在,博客更換到 WordPress 沒幾天,就被 SPAM(垃圾留言)盯上,又被暴力破解後臺用戶名密碼。之前介紹過 Apache 使用 .htaccess 屏蔽惡意 User Agent,今天來介紹 Nginx 屏蔽惡意 User Agent的方法。 先上規則&註釋 #禁用未初始化變量警告 uninitialized_variable_warn off; #匹配各類 bad user agent,返回403錯誤 if ($http_user_agent ~* "embeddedwb|NSPlayer|WMFSDK|qunarbot|mj12bot|ahrefsbot|Windows 98|MSIE 6.0; Windows 2000|EasouSpider|Sogou web spider") { return 403; } #匹配POST方法,給變量iftemp賦值 if ($request_method ~* "POST") {set $iftemp X;} #匹配 bad user agent,給變量iftemp賦值;這幾個UA主要是發垃圾留言的 if ($http_user_agent ~* "MSIE 6.*NET|MSIE 7.*NET|MSIE 6.*SV1|MSIE 6.0; Windows NT 5.0") { set $iftemp "${iftemp}Y"; } #若是變量iftemp符合上面兩個條件,返回403錯誤 if ($iftemp = XY) {return 403;} 禁用未初始化變量警告,否則會不停寫入警告到錯誤日誌error.log,以下 2014/09/11 09:21:11 [warn] 18649#0: *132 using uninitialized 「iftemp」 variable, client: 220.181.51.209, server: www.wilf.cn, request: 「GET /wp-content/themes/dazzling/inc/fonts/glyphicons-halflings-regular.woff HTTP/1.0」, host: 「www.wilf.cn」, referrer: 「http://www.wilf.cn/」 2014/09/11 09:21:11 [warn] 18649#0: *92 using uninitialized 「iftemp」 variable, client: 66.249.79.55, server: www.wilf.cn, request: 「GET /page/14?mod=pad&act=view&id=741 HTTP/1.1」, host: 「www.wilf.cn」 Nginx 規則不支持2個以上的條件判斷,繞個路,經過給變量兩次賦值來完成2個條件判斷。 Nginx 規則也是使用正則表達式匹配字符串,分析日誌,根據須要本身定製。 檢驗成果的時候到了 183.60.214.51 — [10/Sep/2014:22:16:18 +0800] — Bytes: 13507 — GET /?mod=pad&act=view&id=460 HTTP/1.1 — 403 — – — Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) — – — – 220.181.125.169 — [11/Sep/2014:09:38:15 +0800] — Bytes: 169 — GET /page/51?mod=wap&act=AddCom&inpId=860 HTTP/1.1 — 403 — – — Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) — – — – EasouSpider 和 Sogou web spider,不再見。 附:搜索引擎蜘蛛爬蟲一覽 更多 bad user agent:HackRepair.com Blacklist