公司某系統(tǒng)經(jīng)常出現(xiàn)短時間內(nèi)同一用戶大量并發(fā)訪問的情況,疑似爬蟲行為,該行為經(jīng)常導致應用節(jié)點連接超時頻發(fā)的問題。由于業(yè)務代碼層對用戶的限速和限制并發(fā)的能力有限,因此決定采用F5后添加nginx反向代理,通過nginx的limit_req_zone模塊進行限速,通過limit_conn_zone模塊來進行限制并發(fā)。
首先利用nginx的內(nèi)置變量$http_x_forwarded_for獲取遠端的訪問IP,以該變量來進行訪問限速。具體訪問策略如下:
▼▼▼
http {
include mime.types;
default_type application/octet-stream;
......(常規(guī)配置忽略)
#gzip on;
#限速策略
limit_req_zone $http_x_forwarded_for zone=req:100m rate=10r/m;
limit_conn_zone $http_x_forwarded_for zone=reqconn:100m;
upstream shsnc {
sticky;
server IP:PORT;
server IP:PORT;
server IP:PORT;
}
server {
listen 80;
......(常規(guī)配置忽略)
#僅對訪問頻繁的頁面加以限速,aa表示頁面URL的關鍵字段)
location ~ .*(aa|bb).* {
proxy_pass http://shsnc;
limit_req zone=reqzone burst=5;
limit_conn reqconn 10;
}
}
由于用戶是通過統(tǒng)一的出口IP來訪問業(yè)務,以上配置僅對出口IP限速,無法對單個用戶訪問進行限速,因此導致用戶訪問比較多時,個別用戶出現(xiàn)無法訪問業(yè)務的情況。因此,改用$http_cookie的方式來進行限速。經(jīng)過查看,發(fā)現(xiàn)http_cookie變量中的信息量過多,格式如下所示:
▼▼▼
JSESSIONID=xxxxxxxxxxxxxxxxxxxxxxxx;
Hm_lvt_fxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
BIGipxxxxxxxxxxxxxxxxxxxx=xxxxxxxxxxxxxxxxxxxxx;
route=xxxxxxxxxxxxxxxxxxxxxxxxxxx;
從上面的格式分析,使用JSESSIONID的值去進行限速比較合理。因此,需要從http_cookie變量中截取JSESSIONID的值作為限速的依據(jù)。最終確定方案如下:
▼▼▼
http {
include mime.types;
default_type application/octet-stream;
......(常規(guī)配置忽略)
#gzip on;
#限速策略
limit_req_zone $jsvalue zone=req:100m rate=10r/m;
limit_conn_zone $jsvalue zone=reqconn:100m;
upstream shsnc {
sticky;
server IP:PORT;
server IP:PORT;
server IP:PORT;
}
server {
listen 80;
......(常規(guī)配置忽略)
#截取設置限速jsessionid字符串
set $jsvalue "";
if ( $http_cookie ~* "JSESSIONID=(.+?)(?=;)" ) {
set $jsvalue $1;
}
#僅對訪問頻繁的頁面加以限速,aa表示頁面URL的關鍵字段)
location ~ .*(aa|bb).* {
proxy_pass http://shsnc;
limit_req zone=reqzone burst=5;
limit_conn reqconn 10;
}
}
最終,通過截取jsessionid的值到達了限速的策略,也解決了內(nèi)網(wǎng)用戶通過統(tǒng)一出口IP訪問業(yè)務相應影響的問題。
更多精彩干貨分享
點擊下方名片關注
IT那活兒
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/129886.html
摘要:在生產(chǎn)環(huán)境中,建議不要使用連接數(shù)限制單個連接的帶寬限制不易過低像迅雷這種下載器的限速,可能需要別的辦法注文中部分內(nèi)容參考自關于的限速模塊 nginx 限速研究匯報 寫在前面 ? ? ? ?這兩天服務器帶寬爆了,情況如下圖:showImg(https://segmentfault.com/img/bVUXj3?w=1884&h=352); 出于降低帶寬峰值的原因,我開始各種瘋狂的研究ng...
摘要:在生產(chǎn)環(huán)境中,建議不要使用連接數(shù)限制單個連接的帶寬限制不易過低像迅雷這種下載器的限速,可能需要別的辦法注文中部分內(nèi)容參考自關于的限速模塊 nginx 限速研究匯報 寫在前面 ? ? ? ?這兩天服務器帶寬爆了,情況如下圖:showImg(https://segmentfault.com/img/bVUXj3?w=1884&h=352); 出于降低帶寬峰值的原因,我開始各種瘋狂的研究ng...
摘要:作為一組獨立的微服務之一被實現(xiàn)并作為一個單獨的進行發(fā)布。該配置將暴露所有由網(wǎng)關發(fā)布的,入口位于,用協(xié)議加密保護。由網(wǎng)關發(fā)布的所有的所有后端服務均在中被定義。與瀏覽器不同,網(wǎng)關并不能向客戶端發(fā)送帶有新的命名的重定向。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術實踐干貨哦~ 本文來自云+社區(qū)翻譯社,作者ArrayZoneYour Nginx往往是構建微服務中必不可缺的一部分,從本文中...
摘要:但是,你的連接數(shù)限制配置為允許單個連接數(shù),單個連接數(shù)最大帶寬為。就降低單個連接數(shù)帶寬吧要知道大家誰沒事會用瀏覽器自帶下載器下載呢注本文只探討限速模塊在不同業(yè)務下的限速彩蛋偶爾發(fā)現(xiàn),將連接數(shù)限制為迅雷不能高速下載了。 nginx 內(nèi)置模塊限速怎么使用就不多說了,今天來說說連接數(shù)和單個連接數(shù)限速的事。 場景:A公司有100人,A公司只有一個公網(wǎng)IP,假設A公司可能有100個人同時在下載你的...
摘要:但是,你的連接數(shù)限制配置為允許單個連接數(shù),單個連接數(shù)最大帶寬為。就降低單個連接數(shù)帶寬吧要知道大家誰沒事會用瀏覽器自帶下載器下載呢注本文只探討限速模塊在不同業(yè)務下的限速彩蛋偶爾發(fā)現(xiàn),將連接數(shù)限制為迅雷不能高速下載了。 nginx 內(nèi)置模塊限速怎么使用就不多說了,今天來說說連接數(shù)和單個連接數(shù)限速的事。 場景:A公司有100人,A公司只有一個公網(wǎng)IP,假設A公司可能有100個人同時在下載你的...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20