如何在nginx中的请求和响应中设置标头的时间戳?

时间:2017-02-21 21:56:14

标签: http nginx httprequest reverse-proxy

在我的用例中,我想在nginx中设置请求和响应中的当前时间戳。我想计算上游服务器所用的时间。因此,当请求到达nginx服务器时,我想将当前时间戳设置为标头,然后当响应来自上游时,我希望另一个标头具有该时间的时间戳。我将确保上游服务器将响应请求时间戳添加到响应中。

这是我的nginx配置,

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    keepalive_timeout  65;
    client_max_body_size 500M;
    #timeouts
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          1m;
    send_timeout                600;
    upstream backend {
      server abcd.com:443;
      keepalive 64;
    }
    #
    # The default server
    #
    server {
      listen   80;
      server_name  http_server;
      error_log  /var/log/nginx/error.log debug;
      location /products {
            rewrite ^/products/(.*) /$1/$2 break;
            proxy_pass https://backend;
            proxy_redirect off;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   Host   $http_host;
            proxy_set_header   X-NginX-Proxy true;
            real_ip_header     X-Forwarded-For;
            real_ip_recursive  on;
          }
        # redirect not found pages to the static page /404.html
        error_page  404  /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }
        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

这并不是回答问题的答案,但是可以增加一些价值。

http://nginx.org/en/docs/varindex.html

列出了几个可用的变量。

其中很大一部分是指与上游服务器相关的事物,例如import com.itko.lisa.vse.stateful.model.TransientResponse; import com.itko.lisa.vse.stateful.model.Response; import com.itko.util.ParameterList; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.lang.String; import org.apache.log4j.*; import groovy.util.logging.*; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; FileInputStream fileInputStream = new FileInputStream("C:/Softwares/LISA/CBO_CurrentBalance1/Data/BalanceReport.xlsx"); //FileInputStream fileInputStream = new FileInputStream("/home/lisa-user/Data/CBOPayment.xlsx"); XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream) XSSFSheet sheet = workbook.getSheet("Sheet1"); XSSFRow row; XSSFCell cell; Iterator rows = sheet.rowIterator(); while (rows.hasNext()) { row = (XSSFRow) rows.next(); Iterator cells = row.cellIterator(); AccountNumber1 = testExec.getStateObject("AccountNumber1") AccountNumber2 = testExec.getStateObject("AccountNumber2") if (AccountNumber1 == cells.next().getStringCellValue()) { if(cells.hasNext()) { Balance = cells.next().getNumericCellValue(); testExec.setStateValue("Balance1", Balance); } } if (AccountNumber2 == cells.next().getStringCellValue()) { if (cells.hasNext()) { Balance = cells.next().getNumericCellValue(); testExec.setStateValue("Balance2", Balance); } } } $upstream_connect_time$upstream_first_byte_time等。通过计算“输入”和“输出”之间的差异,这些将为您提供更多的见解。但是我不清楚哪个$upstream_header_time变量或一组变量会为您提供与上游服务器交互的全部时间,也许其他人可以发布该信息。

您可以创建自定义日志格式,将这些变量的值添加到日志文件中,或者可能将它们添加到响应标头中。

答案 1 :(得分:0)

使用机器和人类友好的URLRequest变量。