我想记录来自客户端请求的自定义标头。我已将“$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 出现意外行为,您可能需要检查一下。