鉴于/etc/nginx/nginx.conf
:
events {}
http {
server {
listen 8000;
location / {
proxy_pass http://localhost:8001;
add_header X-Trip-Time $request_time;
add_header X-Process-Time $upstream_response_time;
}
}
}
跑步:
python3 -u -m http.server 8001 > app.log 2>&1 & sudo nginx
其次是:
curl -i localhost:8000
显示这两个标题:
X-Trip-Time: 0.001
X-Process-Time: -
我见过这相关问题,其中说:
如果在连接到上游时出现内部错误或者从缓存中获取答复,则变量设置为 -
但我的上游服务器已成功连接,如下所示cat app.log
:
127.0.0.1 - - [03/Feb/2021 19:41:44] "GET / HTTP/1.0" 200 -
$upstream_response_time
相等-
但仍然$request_time
按预期工作的原因是什么?
答案1
我收到了这个答案在 nginx 邮件列表上:
这是因为响应标头是在知道 $upstream_response_time 之前发送的:只有当从上游服务器完全收到响应(包括响应主体)时才知道,而这发生在响应标头发送到客户端之后。如果您想在响应标头中返回某些内容,请考虑使用 $upstream_header_time 变量(http://nginx.org/r/$upstream_header_time)。
我在文档中找不到有关 nginx 如何缓冲的任何信息回应(只能找到请求的文档)以及是否可以配置,但可以肯定的是更改$upstream_response_time
为$upstream_header_time
正在运行,而且从日志来看时间非常接近,至少当响应主体大小很小时,比如我的情况。