SoFunction
Updated on 2025-03-04

The difference between request_time and upstream_response_time in Nginx log

In modern web application architectures, Nginx is widely used as a reverse proxy, load balancer, and static resource server. Its efficient processing power and flexible configuration make it the preferred tool for most high-traffic websites. In the actual operation and maintenance and development process, Nginx logs are one of the important basis for us to perform performance tuning and troubleshooting.

Nginx provides a variety of log variables, the most commonly used ones includerequest_timeandupstream_response_time(Sometimes abbreviated asupstream_time). These two variables record the total processing time of the request and the time when Nginx interacts with the upstream server respectively. They are very important for analyzing the performance of the request and positioning bottlenecks. This article will analyze the differences between these two variables in detail and discuss how to optimize system performance based on them.

1. The role of Nginx log

Logging is an indispensable tool in web development and operation and maintenance. Nginx's logging capabilities provide rich information for analyzing system performance and monitoring request processing. By configuring different log formats, various information can be flexibly recorded, such as the request time, the source IP, the requested URL, the request response time, etc.

Generally, Nginx has two types of logs:

  • Access Log: Records the details of each HTTP request.
  • Error Log: Record error messages during Nginx running.

in,It is one of the most commonly used logs, which records all requested information, including request time, status code, client IP, user agent, etc.

In NginxIn configuration,log_formatAllows us to define the output format of the log and flexibly configure which information needs to be recorded. By using different variables in the log, we can get the detailed processing of the request, whererequest_timeandupstream_response_timeare two key time variables.

2. Request_time and upstream_response_time: concepts and their differences

1. request_time: total request time

request_timeWhat is recorded isRequests are initiated from the client to Nginx to complete processingTotal time. It is a very important indicator that reflects the full life cycle of requests in Nginx.

Specifically,request_timeIncludes the following parts:

  • Time when the client connects to Nginx: This is the connection time when the client initiates a request to the Nginx server. It includes network latency and communication time between the client and Nginx.
  • Nginx's time to process requests: Including the time for Nginx to resolve requests, selecting the appropriate backend server, and performing load balancing operations.
  • Nginx requests and waits for its response to the upstream server: When Nginx is configured as a reverse proxy, it forwards the request to the upstream server. This process includes sending a request to the upstream server, waiting for a response from the upstream server, and receiving a response from the upstream server.
  • The time returned to the client after the upstream response: Once the upstream server returns the response, Nginx needs to send the response back to the client, and the return time will also be included inrequest_timemiddle.

therefore,request_timeis the full time Nginx handles requests, including all interactions with the client and upstream servers.

2. upstream_response_time: upstream response time

upstream_response_timeWhat is recorded isSend a request from Nginx to the upstream server to return a responsetime. This time only involves the interaction between Nginx and the upstream server, and does not include the processing of client requests and the time when the response is returned to the client.

Specifically,upstream_response_timeInclude:

  • Nginx sends requests to the upstream server: i.e. the time when Nginx forwards the request to the upstream server.
  • The time when the upstream server processes the request and returns the response: That is, the time from the time the upstream server receives the request to the return response.

upstream_response_timeReflects the communication delay between Nginx and the upstream server, including network transmission time and upstream server response time. It does not include the time Nginx handles client requests and is therefore an important metric for evaluating upstream server performance and network latency.

3. Main differences

request_timeandupstream_response_timeThe difference is mainly reflected in the different time periods they involve:

  • request_time: Indicates the total processing time of the request, including the communication time between the client and Nginx, the time when Nginx handles the request, the time when the request is initiated to the upstream server and wait for the response, and the time when the response is returned to the client.
  • upstream_response_time: Only involves the interaction time between Nginx and the upstream server, that is, the time when a request is sent from Nginx to the upstream server to the upstream server to return the response.

Example

Suppose a log entry is as follows:

192.168.1.1 - - [11/Nov/2024:16:30:23 +0000] "GET /api/v1/resource HTTP/1.1" 200 1234 "-" "Mozilla/5.0" "-" request_time=0.150 upstream_response_time=0.120
  • request_time=0.150: Indicates that the total time when the request is sent from the client to Nginx to complete processing and return the response is 0.150 seconds.
  • upstream_response_time=0.120: Indicates that the time when Nginx sends a request to the upstream server and waits for a response is 0.120 seconds.

4. How to optimize performance

Through observationrequest_timeandupstream_response_time, we can further locate performance bottlenecks and take corresponding optimization measures.

1) Request_time is higher:

ifrequest_timeHigher, butupstream_response_timeLow, which indicates that the problem may be in the request processing of Nginx. Common reasons include:

  • Nginx configuration issues: For example, improper reverse proxy configuration, unreasonable load balancing algorithm, etc.
  • Network latency or client connection issues: The network latency between the client and Nginx is high, or the connection is unstable.

At this point, you can consider optimizing Nginx configuration, such as using more efficient load balancing algorithms, increasing caching mechanisms, or adjusting Nginx's worker processes and connections.

2) upstream_response_time is higher:

ifupstream_response_timeHigher, indicating that the request delay is mainly concentrated in the interaction with the upstream server. This is usually due to slow responses on the upstream server or insufficient processing power on the upstream server.

  • Upstream server performance bottleneck: The upstream server takes a long time to process requests, and it may be necessary to optimize the performance of the backend service or add more backend servers to share the load.
  • Network delay: The network latency between the upstream server and Nginx is high, and it may be necessary to optimize network configuration or increase bandwidth between servers.

By adding more upstream servers and optimizing backend database query and caching mechanisms, it can effectively reduceupstream_response_time

3. How to use these two variables in the log

In Nginx, it can be configuredlog_formatCome and recordrequest_timeandupstream_response_time. For example:

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      'request_time=$request_time upstream_response_time=$upstream_response_time';

    access_log /var/log/nginx/ main;
}

In this configuration, we willrequest_timeandupstream_response_timeAdd to log format. Whenever a request is processed, Nginx will record these two time values ​​in the log to help us analyze the performance of the request.

4. Summary

In Nginx's logs,request_timeandupstream_response_timeThese are two very important performance indicators. They record the total processing time of the request and the interaction time between Nginx and the upstream server, respectively. By analyzing these two indicators, we can accurately locate performance bottlenecks, thereby taking targeted optimization measures to improve the response speed and stability of the entire system.

  • request_time: Indicates the total time from the client request to Nginx completing processing, reflecting the entire request processing process.
  • upstream_response_time: Indicates the time when a request is sent from Nginx to the upstream server to the upstream server returns a response, reflecting the response speed of the upstream server.

Through reasonable configuration and analysis of these two indicators, operation and maintenance personnel can better optimize the system and ensure efficient and stable service delivery.

This is the end of this article about the difference between request_time and upstream_response_time in Nginx log. For more information about Nginx request_time upstream_response_time, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!