它supervisord
位于端口 9001。对其 Web 界面的访问是通过 nginx 组织的,如下所示:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name supervisor.example.com;
location / {
proxy_pass http://127.0.0.1:9001;
include proxy_params;
proxy_read_timeout 120s;
}
}
Supervisor Web 界面具有tail -f
允许您实时监控日志的功能。
如果您tail -f
通过类似的链接直接从主管打开http://example.com:9001/logtail/service_name
,那么一切正常。(在实际生产中,出于安全原因,当然不能从 Internet 访问 9001 端口)
然而,同样的事情,但通过 nginx: https://supervisor.example.com/logtail/service_name
- 不再起作用:在浏览器中显示一个无限加载的空页面。
谁应该受到责备,该怎么办?
首先,代理 nginx 正在缓存服务器响应:它首先尝试等待完整的响应主体,然后才开始向客户端发送响应。自然,对于
tail -f
nginx,它永远不会等待完整的响应主体(好吧,否则它会因超时而下降),因此必须禁用缓冲:其次,为了实时更新日志,Supervisor使用
Transfer-Encoding: chunked
的是HTTP/1.1才有的,而nginx默认使用的是HTTP/1.0,所以还需要更改协议版本:第三,由于我不明白的原因(也许这是一个错误?)如果指定了 HTTP 标头,Supervisor 拒绝返回响应
Connection
,所以我必须删除它:通常,配置如下所示:
应用后,它将
tail -f
起作用。