共計 1716 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要為大家展示了“Web 應用服務器如何實現并發訪問控制”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“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 應用服務器如何實現并發訪問控制”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!