我们已通过 Beanstalk 在 AWS 上部署了 Java Web 应用程序。负载均衡器设置为将 https (443) 转发到 EC2 上的端口 80,并将 http (80) 转发到 EC2 上的端口 80。EC2 实例运行 Apache,并使用重写规则将 http 流量重定向到 https,如下所示:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/healthcheck$
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
一切都运行良好。现在我想设置一些监控来定期验证此规则是否仍然有效。(过去该规则被错误地删除,我们只是偶然注意到这一点)。最好的方法是什么?
编辑:我们没有设置任何外部系统监视器,我们只使用 Cloud Watch。理想情况下,我希望留在 AWS 内进行设置,例如使用 CloudWatch。
答案1
您可以设置CloudWatch 日志监控在 Apache 实例上监控 Apache 访问日志。
然后创建一个度量过滤器在 cloudwatch 中使用类似以下内容:
[host, logName, user, timestamp, request, statusCode=301, size, referer, useragent, ...]
然后,您将在 CloudWatch 中获得随时间推移的 301 次重定向的漂亮图表,并且可以创建 CloudWatch 警报,以在每分钟或每小时的请求数低于某个阈值时发出通知。
另一个解决方案可能是将 301 错误文档设置为包含简短正文,然后创建路由 53 健康检查来监控重定向 URL 并搜索错误文档的正文。默认情况下,Apache 301 错误文档应包含“301 永久移动”,因此您可以创建查找该字符串的 Route53 健康检查。
答案2
无论您使用哪种监控软件,都可能支持此功能。例如,Nagios 从 check_http 返回以下内容:
HTTP OK: HTTP/1.1 302 Redirect - 377 bytes in 0.073 second response time
您可能可以让它专门检查 302 重定向。(交换机-f follow
会跟随重定向,但这可能是也可能不是您想要的。)或者编写自定义脚本,如 EEAA 在评论中所建议的那样。