我最近在 Nginx/Rails 應用程式服務器上發生了中斷。事實證明,我們受到了對特定 URL 的請求的轟炸,這些請求需要幾秒鐘才能加載。似乎用戶持續重繪 該頁面數分鐘 - 我的猜測是他們不小心將某些物件放在鍵盤上以觸發瀏覽器不斷重繪 的方式。
無論原因如何,我都需要針對此類問題采取保護措施,并注意這不是靜態內容 - 它是身份驗證背后的動態、特定于用戶的內容。
我已經研究過使用 Cache-Control 但這似乎是一個非啟動器 - 至少在 Chrome 上,重繪 同一選項卡中的頁面將觸發請求,而不管 Cache-Control 標頭如何(cf iis - Chrome 是否忽略快取-控制:最大年齡? - 堆疊記憶體溢位)
我相信答案可能是限速。如果是這樣,我將無法基于 IP 來做這件事,因為我們的許多客戶共享同一個 IP。但是,我可以添加一個新標頭來識別用戶,然后基于此在 Nginx 中應用速率限制。
這聽起來像是前進的道路嗎?這感覺應該是一個相當普遍的問題!
uj5u.com熱心網友回復:
如果需要立即緩解,Nginx 速率限制是一個快速的配置更新。正如其他人所提到的,與此結合使用快取也是理想的選擇。
server {
# DoS Mitigation - Use IP and User Agent to prevent against NAT funnels from different computers
limit_req_zone $host$binary_remote_addr$http_user_agent zone=rails_per_sec:10m rate=2r/s;
upstream rails {...}
try_files $uri $uri/ @rails;
location @rails {
limit_req zone=rails_per_sec burst=10 nodelay;
...
}
}
的$http_authorization報頭或唯一的cookie(例如$cookie_foo)也可以被用于唯一地標識,將用相同的IP /用戶代理值沖突的請求。
limit_req_zone $host$binary_remote_addr$http_authorization ...;
limit_req_zone $host$binary_remote_addr$cookie_foo ...;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/384610.html
下一篇:如何用圖示寫繭洗掉鏈接
