日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

 

一、真假難辨

如何禁止訪問,我們先了解下常見的3種網站訪問模式:

用戶直接訪問對外服務的普通網站
瀏覽器 --> DNS解析 --> WEB數據處理 --> 數據吐到瀏覽器渲染展示
用戶訪問使用了CDN的網站
瀏覽器 --> DNS解析 --> CDN節點 --> WEB數據處理 --> 數據吐到瀏覽器渲染展示
用戶通過代理上網訪問了我們的網站
瀏覽器 --> 代理上網 --> DNS解析 --> 上述2種模式均可能

對于第一種模式,我要禁止這個用戶的訪問很簡單,可以直接通過 iptables 或者 Nginx的deny指令來禁止均可:

iptabels:
iptables -I INPUT -s 用戶ip -j DROP
Nginx的deny指令:
語 法: deny address | CIDR | unix: | all;
默認值: —
配置段: http, server, location, limit_except
順 序:從上往下
Demo:
location / {
deny 用戶IP或IP段;
}

但對于后面2種模式就無能為力了,因為iptables 和 deny 都只能針對直連IP,而后面2種模式中,WEB服務器直連IP是CDN節點或者代理服務器,此時使用 iptable 或 deny 就只能把 CDN節點 或代理IP給封了,可能誤殺一大片正常用戶了,而真正的罪魁禍首輕輕松松換一個代理IP又能繼續請求了。

那我們可以通過什么途徑去解決以上問題呢?

二、火眼金睛 如果長期關注張戈博客的朋友,應該還記得之前轉載過一篇分享Nginx在CDN加速之后,獲取用戶真實IP做并發訪問限制的方法。說明Nginx還是可以實實在在的拿到用戶真實IP地址的,那么事情就好辦了。

要拿到用戶真實IP,只要在Nginx的http模塊內加入如下配置:

#獲取用戶真實IP,并賦值給變量$clientRealIP
map $http_x_forwarded_for $clientRealIp {
 "" $remote_addr;
 ~^(?P<firstAddr>[0-9.]+),?.*$ $firstAddr;
}

那么,$clientRealIP就是用戶真實IP了,其實就是匹配了 $http_x_forwarded_for 的第一個值,具體原理前文也簡單分享過:

其實,當一個 CDN 或者透明代理服務器把用戶的請求轉到后面服務器的時候,這個 CDN 服務器會在 Http 的頭中加入一個記錄
X-Forwarded-For : 用戶IP, 代理服務器IP
如果中間經歷了不止一個代理服務器,這個記錄會是這樣
X-Forwarded-For : 用戶IP, 代理服務器1-IP, 代理服務器2-IP, 代理服務器3-IP, ….
可以看到經過好多層代理之后, 用戶的真實IP 在第一個位置, 后面會跟一串中間代理服務器的IP地址,從這里取到用戶真實的IP地址,針對這個 IP 地址做限制就可以了。
而且代碼中還配合使用了 $remote_addr,因此$clientRealIP 還能兼容上文中第1種直接訪問模式,不像 $http_x_forwarded_for 在直接訪問模式中將會是空值!
所以,$clientRealIP 還能配置到 Nginx 日志格式中,替代傳統的 $remote_addr 使用,推薦!

三、隔山打牛

既然已經拿到了真實IP,卻不能使用 iptables 和 deny 指令,是否無力感油然而生?

哈哈,在強大的 Nginx 面前只要想得到,你就做得到!通過對 $clientRealIP 這個變量的判斷,Nginx就能實現隔山打牛的目的,而且規則簡單易懂:

#如果真實IP為 121.42.0.18、121.42.0.19,那么返回403
if ($clientRealIp ~* "121.42.0.18|121.42.0.19") {
 #如果你的nginx安裝了echo模塊,還能如下輸出語言,狠狠的發泄你的不滿(但不兼容返回403,試試200吧)!
 #add_header Content-Type text/plain;
 #echo "son of a bitch,you mother fucker,go fuck yourself!";
 return 403;
 break;
}

把這個保存為 deny.conf ,上傳到 Nginx 的 conf 文件夾,然后在要生效的網站 server 模塊中引入這個配置文件,并 Reload 重載 Nginx 即可生效:

#禁止某些用戶訪問
include deny.conf;
如果再想添加其他要禁止的IP,只需要編輯這個文件,插入要禁止的IP,使用分隔符 | 隔開即可,記得每次修改都需要 reload 重載 Nginx才能生效。

分享到:
標簽:Nginx CDN
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定