nginx禁止特定UA訪問


一、UA是什么?

 User Agent 簡稱UA,就是用戶代理。通常我們用瀏覽器訪問網站,在網站的日志中,我們的瀏覽器就是一種UA。

二、禁止特定UA訪問

最近有個網站(www.C.com)抄襲公司主站(www.A.com)的內容,除了域名不同,內容、圖片等都完全是我們主站的內容。

出現這種情況,有兩種可能:

一種是:它用爬蟲抓取公司主站(www.A.com)的內容並放到自己服務器上顯示;

另一種是:通過將訪問代理至公司主站(www.A.com),而域名(www.C.com)是盜用者的,騙取流量。

無論怎樣,都要禁止這種行為的繼續。

 

通過分析日志,沒有發現爬蟲大量爬取公司主站(www.A.com)內容頁面的信息。

測試是否是代理,測試步驟:

1)訪問www.C.com並指定參數

URL : www.C.com/chaojikaifangfu.html/?cccc

2)檢查公司主站的web服務器上的nginx日志

發現有記錄,說明剛才的訪問被代理到公司主站web上了。

UA(雙引號里邊的是UA的全名):Resty/HTTP 0.03 (Lua)

 

有兩種方法解決:

1)禁止IP

2)禁止UA

從nginx日志觀察,訪問者的代理IP經常變,但是訪問UA卻是固定的,因而可以禁止UA。

 

禁止特定UA:

1)nginx配置信息

nginx配置目錄:/usr/local/nginx/conf/

2)在nginx配置目錄中,創建新的配置文件agent_deny.conf,添加如下內容:

# 禁止特定UA訪問
# ~ "Lua" :表示用戶UA匹配"Lua"字符串,區分大小寫
# 當用戶UA被匹配成功,則返回403錯誤,不給予訪問。
if ($http_user_agent ~ "Lua"){ return 403; }

3)添加該配置到相應的server或location段

include  agent_deny.conf;

注意:不能加到http段,if 用於http段會報語法錯誤的。

4)使配置生效

nginx -t
nginx -s reload

5)檢查禁止特定UA的功能是否成功

 利用curl工具,指定UA去訪問公司主站(www.A.com)

 沒禁止特定UA前,訪問結果:

# curl -I -A "Resty/HTTP 0.03 (Lua)" www.A.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Date: Thu, 03 Nov 2016 15:50:13 GMT
Content-Length: 361168
Vary: Accept-Encoding
Age: 294
Pragma: public
Server: nginx
Accept-Ranges: bytes

禁止特定UA后,訪問結果:

# curl -I -A "Resty/HTTP 0.03 (Lua)" www.A.com
HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 03 Nov 2016 15:55:17 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive

對比兩次結果,發現:nginx已經能禁止特定的UA訪問了。

 

補充:

觀察一陣子后,發現還有禁止UA為空的訪問和放行內網ip不做禁止的需求。

nginx的配置中不支持if條件的邏輯與、邏輯或運算 ,並且不支持if的嵌套語法,但我們可以使用變量達到想要的效果。

#白名單:192.168.1
#禁止特定UA和UA為空的訪問

set $flag 0;

if ($remote_addr !~ "^(192.168.1)"){
set $flag "${flag}1";
}

if ($http_user_agent ~ "Lua|^$"){
set $flag "${flag}2";
}

if ($flag = "012"){
return 403;
}

 

注意:以下的寫法是錯誤的!!!

if ($remote_addr !~ "^(192.168.1)" && $http_user_agent ~ "Lua|^$") { 
    return 403; 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM