Monit本地HTTP状态检测异常:TCP/IP协议HTTP失败原因排查
问题分析与解决方案
我来帮你拆解这个问题——你遇到的错误确实和页面返回301状态码直接相关,核心原因是Monit 5.20版本不支持自动跟随HTTP重定向。
具体原因
Monit 5.20及更早的版本在做HTTP状态码检查时,会严格校验你指定的目标路径返回的原始状态码。当/mypage/返回301(永久重定向)时,Monit不会自动跳转到重定向后的地址,而是直接判定这个301不符合你要求的200状态码,因此抛出你看到的TCP/IP协议HTTP检查失败的错误。
可行的解决方案
根据你的场景,有几种不同的处理方式:
1. 直接监控重定向后的目标URL
先通过curl -I http://127.0.0.1:7778/mypage/命令确认/mypage/具体重定向到哪个地址(比如可能是/mypage不带尾斜杠的路径),然后修改Monit配置为直接请求这个目标路径:
check host gateway with address 127.0.0.1 if failed port 7778 protocol http request "/mypage" # 替换为重定向后的实际路径 status = 200 then alert
2. 升级Monit版本(推荐,若环境允许)
Monit从5.21版本开始新增了follow redirects选项,支持自动跟随HTTP重定向。如果你可以升级Debian 9上的Monit(比如使用backports源),就能保留原路径的同时让Monit自动处理重定向:
check host gateway with address 127.0.0.1 if failed port 7778 protocol http request "/mypage/" status = 200 follow redirects then alert
3. 调整状态码检查逻辑(仅当301是正常预期时使用)
如果你确认/mypage/返回301是业务允许的正常状态,可以把检查逻辑改为同时接受200和301:
check host gateway with address 127.0.0.1 if failed port 7778 protocol http request "/mypage/" status = 200 or status = 301 then alert
⚠️ 注意:这种方式会掩盖真正的服务异常(比如服务挂了返回500),只适合你明确301是预期状态的场景。
内容的提问来源于stack exchange,提问作者MoreOver
相关产品推荐
相关产品推荐

