
我正在建立一個 Web 服務端點,人們將在其中發布 xml 文件,並且每秒確實會受到超過 1K 請求的衝擊。
現在他們透過 http post 發送這些 xml 文件,但其中大多數將受到速率限制。
問題是,速率限制將由Web應用程式透過尋找xml中的source_id來完成,如果每分鐘超過x個請求,則不會進一步處理。
我想知道是否可以在處理的早期以某種方式進行速率限制檢查,從而節省 50K 檔案將管道扔到我的 Web 伺服器並消耗資源。
負載平衡器能否以某種方式發出呼叫來驗證費率使用情況?
如果可能的話,我可以將 source_id 放入主機標頭中,這樣即使 XML 檔案也不必解析並載入到記憶體中。
是否可以只查看主機頭而不將整個 50K xml 檔案載入到記憶體中?
我真的很欣賞你的見解,因為這需要更多關於整個 tcp/ip 堆疊等的知識。
答案1
有兩種基本類型的可能性:
1)您正在與敵對的攻擊者打交道,他們不會配合您的設計。在這種情況下,您為什麼關心Host
他們發送的標頭?透過 IP 對它們進行速率限制。
2) 您正在與合作的客戶打交道,他們施加的負載超出了您的預期。在這種情況下,只需接受請求並向他們發送回复,告訴他們退後。
如果您遇到更複雜的情況,不屬於這兩個簡單類別之一,則最佳解決方案可能取決於具體情況。
答案2
您可以透過 apache 使用類似的模組來阻止它。或者,如果您想提早將其刪除,您可以使用 iptables 字串匹配通過正規表示式來阻止某些內容。
答案3
這就是TC命令/實用程式是為了 - 這需要一些工作,但值得付出努力。我用它來限制向我們公司 LAN 外的 DMZ 中伺服器的傳輸速率。
這裡有一些讓我走上正軌的連結...
Tc 濾波器 - 連接埠範圍計算遮罩值: http://mailman.ds9a.nl/pipermail/lartc/2007q4/021739.html
限制單一主機或網路遮罩的速率: http://lartc.org/howto/lartc.ratelimit.single.html