您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Web應用服務器如何實現并發訪問控制”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Web應用服務器如何實現并發訪問控制”這篇文章吧。
前端負載一臺,作用是客戶端發起一條http請求到前端負載均衡服務器,然后負載層根據web server已定義的輪詢算法,把各消息原封不動的轉發到后段的各web server上,壓力這塊不是很大,因為都轉到后端了。
但是有個問題,客戶端在發起一條http請求到前端負載層的時候,一分鐘內這個請求數會達到驚人的幾十萬條不等(項目業務需要,客戶端自身需要把金額等數據同步到各項目服務器上),基本是客戶端對服務端發起的同步請求,還有其它的對web站點的訪問請求。然后可能有些同步請求不是必須也不需要那么頻繁或者是在這個時間內根本不需要把數據同步上來。固鑒于此就想著看能不能在前端負載層做個并發控制,對這個傳過來的客戶端IP做個操作。當這個IP請求次數大于內部設定的某個值的時候就讓它拒絕訪問服務器,這樣的話服務器在處理消息的時候也會更加有效率,也能起到一定的宮級作用。想了想應該可以實現,所以才有了下面的腳本。記錄下來供各位小伙伴參考下......
#!/bin/bash #Author:You Names #Contact Mail:455436588@qq.com #Version:3.0 #Company:COMPANY #Create time:2019-07-17 17:31:58 #Description:Nginx server concurrency restrictions Max=100000 CFS=/usr/local/nginx/conf/nginx.conf LOGS=/usr/local/nginx/logs/access.log #執行循環體 #過濾出access.log日志里所定義的'$remote_addr'地址。重復的打印出來并排序; cat $LOGS | awk '{print $2}' | sort -n | uniq -c | sort -rn | head -n 10 | while read line do #定義變量$IP,打印出是哪個IP; IP=`echo "$line" | awk '{print $2}'` #定義變量$Count,打印出這個IP出現的次數; Count=`echo "$line" | awk '{print $1}'` #定義變量$Docs,值為nginx的配置文件; Docs=${cat $CFS} #定義變量$CFG,看配置文件里有沒有這個IP; CFG=`echo "$Docs" | grep "${IP}"` #判斷,如果$Count的值大于$Max的值,并且在$CFG里為空,不是這也不是那,執行替換并寫入到$Docs指定location下做deny操作,重載并continue; if [[ $Count -gt $Max ]] && [[ $CFG == " " ]] && [[ $IP != "IP ADDRESS" ]] && [[ $IP != "IP ADDRESS" ]] then sed -i '/location \/ {/a\deny '${IP}';' $CFS sed -i '/location \/pads {/a\deny '${IP}';' $CFS sed -i '/location \~\* \\\.ios\$ {/a\deny '${IP}';' $CFS sed -i '/location \~\* \\\.android\*\$ {/a\deny '${IP}';' $CFS /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload && echo "SUCCESS!!" else continue fi done
以上是“Web應用服務器如何實現并發訪問控制”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。