起源
前幾天 Release 了 Uber Now,目的是希望快速地獲得來接你的時間。沒想到我好心提供的 Backend 一直被不明人士每隔五秒鐘就要來幫我測流量,導致這篇文章的誕生…
上網查了一下,要限制 API Endpoints 關鍵字大約用 API
, Rate Limiting
之類的去查可以發現一些解法,因為我這次是把用 Node 寫的跑在 Apache2 後面,所以我找了一個 apache2 上好像還滿常用的 mod 來玩玩看。
安裝 & 設定
// install using apt-get |
編輯 site-avaliable 中的設定sudo vim /etc/apache2/sites-available/uber
檔案內容如下<VirtualHost *:80>
ServerName pebble-uber.yulun.me
ServerAlias *.pebble-uber.yulun.me
<Location />
SecRuleEngine On
SecAction "phase:1,nolog,initcol:IP=%{REMOTE_ADDR},setvar:IP.pagecount=+1,expirevar:IP.pagecount=60"
SecRule IP:PAGECOUNT "@gt 10" "phase:1,deny,status:403,msg:'Too many requests'"
ProxyPass http://localhost:7777/
ProxyPassReverse http://localhost:7777/
</Location>
</VirtualHost>
從上面可以看到設定設定 使用 IP=%{REMOTE_ADDR}
,setvar:IP.pagecount=+1,expirevar:IP.pagecount=60
則代表取名變數 pagecount 過期的時間是 60 秒鐘。
SecRule IP:PAGECOUNT "@gt 10" "phase:1,deny,status:403,msg:'Too many requests'
上面這行就是說超過 pagecount > 10
的話就拒絕訪問,回應 HTTP STATUS 403
這樣一個簡單的保護就完成啦!(記得重啟)
sudo service apache2 restart |
自己的 Endpoint 自己保護 我們下次見!