我的服务器上有一个使用 haproxy 的日志收集服务。所有来自外部的请求都通过 haproxy 提供。
当我从curl/postman调用日志收集服务时,所有服务的日志收集都发生在后端,并在客户端计算机上下载zip。
即使对于 30 GB 的文件,使用curl/postman 时也会发生这种情况。在这种情况下,日志收集可能需要 15-20 分钟。
但是当使用浏览器时,操作会进入循环行为,即 haproxy 不断从客户端获取新请求,而旧请求的状态为 haproxy_termination_state: CD。尽管网络选项卡不显示任何发送到服务器的新请求,并且永远保持待处理状态。
{
"app": "haproxy",
"content_type": "-",
"dst_connect_time": "2",
"dst_ip": "x.x.x.32",
"dst_port": "8090",
"dst_response_time": "1126057",
"duration": "1126059",
"haproxy_backend": "x_read",
"haproxy_termination_state": "CD",
"host": "x",
"http_status": "200",
"msg": "200 GET /x/api/v1/logs?minTime=2023-10-03T03:30:03.634Z&maxTime=2023-10-10T03:30:03.634Z HTTP/1.1",
"request_bytes": "1094",
"response_bytes": "4083",
"src_ip": "x.x.x.53",
"src_port": "49605",
"timestamp": "2023-10-10T03:48:55Z",
"user_agent": "like Gecko) Chrome/117.0.0.0 Safari/537.36"
}
由于curl和postman工作正常,这似乎是浏览器特定的问题。我检查了系统上的空间(这很好),Chrome 上的下载设置(看起来也很好)。
是否存在 haproxy 内部重试请求或浏览器再次发送请求而不显示在网络选项卡上的情况?
即使请求需要等待超过 5 分钟,它在我的环境中也能正常工作。但问题发生在客户的环境中。
是否存在 haproxy 内部重试请求或浏览器再次发送请求而不显示在网络选项卡上的情况?
是的。 Chrome、Firefox 和 Edge 的 http 请求超时时间均为 5 分钟。
在这种情况下,日志收集可能需要 15-20 分钟。
那么您就无法从浏览器对日志进行同步请求。您需要使用 comet 或网络套接字(我建议它们实现一个标记系统,重定向到内容而不是直接提供内容)。