背景
你好,
我有一台在免费 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/我的 rails 后端/vanilla HTML/JS 前端)。如果我能提供任何其他信息,请告诉我。
谢谢,
雅各布
您需要找出导致 CPU 峰值的请求。从您的访问日志开始,它可能是一小组 IP,但更有可能是随机机器人攻击您的服务器。你必须应对它,这在互联网上很正常。
我首先将服务器放在 CloudFlare 后面。确保将安全组更改为仅允许 CloudFlare IP 和您的私有 IP 直接访问服务器。这可能会阻止一些不良行为者。
接下来,您可以设置 Fail2Ban,并可选择配置 fail2ban 以使用 CloudFlare 防火墙阻止不良行为者(文章链接)。