在 nginx 中记录请求标头

在 nginx 中记录请求标头

我想记录来自客户端请求的自定义标头。我已将“$http_my_header”添加到我的 log_format 中,并且可以很好地记录 POST 请求。另一方面,所有 GET 请求都会记录空值。

GET请求示例:

GET /pws HTTP/1.1
upgrade: websocket
connection: Upgrade
sec-websocket-key: XXXX
host: XXXX
sec-websocket-origin: XXXX
sec-websocket-version: 13
X-Plumbr-sessionId: XXXX
X-Plumbr-accountId: XXXX
X-Plumbr-build: SNAPSHOT

我的 nginx log_format 包含

"$http_x_plumbr_accountid" "$http_x_plumbr_build" 

GET 请求中的记录标头是否需要一些特殊配置?

答案1

我不知道这会有多大帮助,但就其价值而言,这是一个工作服务器块配置,我用它通过标准请求变量设置请求标头并将它们代理到 IIS 服务器,在该服务器上它们被正确接收并解释了。我确信您可以通过查阅 Nginx 文档来查看所有可用变量,利用这些变量(或您需要的变量)将其包含在访问日志中,从而实现相同的目的。这是我正在使用的服务器块:

server {
        listen       8001;
        server_name  localhost;
        location / {
            proxy_set_header  x-client-IP      $remote_addr;
            proxy_set_header  x-forwarded-for  $proxy_add_x_forwarded_for;
            proxy_set_header  host             $http_host;
            proxy_pass        http://127.0.0.1:80/;
        }
}

根据您设置日志格式以及创建和/或获取标头值的位置,应该可以进行相同的操作。您还可以使用请求类型的逻辑,如果 GET 似乎正常工作并且 POST 出现意外行为,您可能需要检查一下。

相关内容