Nginx
EC2:相對較小的網路輸出峰值導致 100% 的 CPU 使用率
背景
你好,
我有一台在免費 EC2 實例上執行的伺服器。我使用 nginx 和乘客/rails 作為我的 Web 伺服器和應用程序伺服器。伺服器接收到的流量很少(仍在開發中),但來自隨機機器人的流量是合理的。伺服器還提供來自 S3 的圖像。前端
mywebsite.com
由一個伺服器塊中定義的靜態服務 at 提供,後端使用乘客 at 提供服務api.mywebsite.com
。問題
伺服器上的 CPU 使用率看似隨機地達到 100%。CPU 使用峰值與網路輸出峰值相關,儘管網路輸出峰值似乎仍然相對較小。發生這種情況時,前端無法再提供服務,我什至無法通過 SSH 連接到伺服器以檢查正在執行的程序。
我試過的
- 使用此 bad-bot-blocker阻止惡意機器人。
- 將網路峰值與 nginx 訪問日誌中的請求相關聯
/var/logs/nginx/access.log
。通常相關性是很不清楚的。- 尋找
/var/logs/nginx/error.log
任何相關的東西。當 CPU 執行此操作時,我通常最終會在 EC2 控制台上重新啟動伺服器,這似乎可以工作,但顯然是不可持續的。
我是部署東西/DevOps 的新手,所以我想知道根據這些資訊是否有任何明顯的我可能遺漏的東西。我什至不確定是什麼層導致了問題(AWS/nginx/my rails backend/vanilla HTML/JS frontend)。如果我能提供任何其他資訊,請告訴我。
謝謝,
雅各布
您需要找出導致 CPU 峰值的請求。從您的訪問日誌開始,它可能是一小組 IP,但更有可能是隨機機器人攻擊您的伺服器。你必須應對它,這在網際網路上很正常。
我首先將伺服器放在 CloudFlare 後面。確保將安全組更改為僅允許 CloudFlare IP 和您的私有 IP 直接訪問伺服器。這可能會阻止一些不良行為者。
接下來,您可以設置 Fail2Ban,並可選擇配置 fail2ban 以使用 CloudFlare 防火牆阻止不良行為者(文章連結)。