Using $upstream_response_time in add_header shows a dash
Maxim Dounin
mdounin at mdounin.ru
Sun Feb 7 15:58:55 UTC 2021
Hello!
On Fri, Feb 05, 2021 at 03:38:16PM -0500, MarioIshac wrote:
> Hello all,
>
> I have this example nginx.conf:
> https://gist.github.com/MarioIshac/e6971ab0b343da210de62ebb1c6e2f99 to
> reproduce the behavior.
>
> I start nginx and an example upstream with:
>
> python3 -u -m http.server 8001 > app.log 2>&1 & sudo nginx > nginx.log 2>&1
>
> Upon hitting nginx with `curl -i localhost:8000`, I see these response
> headers:
>
> X-Trip-Time: 0.001
> X-Addr: 127.0.0.1:8001
> X-Status: 200
> X-Process-Time: -
>
> `cat app.log` shows that upstream was hit successfully, and `cat nginx.log`
> shows that nginx knows the $upstream_response_time at log time, as I get
> this log:
>
> 127.0.0.1:8001 200 0.004
>
> Why does nginx substitute the request time and relevant response metadata
> (like $upstream_status) at add_header time successfully, yet substitutes the
> upstream response time with a dash?
>
> My goal with returning $upstream_response_time in a header is so the client
> can know how much of their request latency was due to their upload speeds
> vs. server processing time.
That's because response headers are sent before the
$upstream_response_time is known: it is only known when the
response is fully received from the upstream server, including the
response body, and this happens after the response headers are
sent to the client. If you want to return something in the
response headers, consider the $upstream_header_time variable
instead (http://nginx.org/r/$upstream_header_time).
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx
mailing list