【问题标题】:Nginx - Access Http custom headers v2Nginx - 访问 Http 自定义标头 v2
【发布时间】:2019-10-11 02:01:38
【问题描述】:

类似于questionthis question, 我有一个客户端(bazel)正在向 nginx 发送请求。

客户端正在向每个请求添加一个名为 build_id 的自定义标头作为 HTTP_BUILD_ID

我只想从nginx 记录这个标头。

我写了一个小的 python flask 应用程序并打印了所有的标题,它表明HTTP_BUILD_ID 确实是请求的一部分。

很遗憾,nginx 找不到它。这就是我的 log_format 添加$http_build_id 后的样子。

log_format main '$remote_addr - $upstream_cache_status [$time_local]
                '"$request" $status $body_bytes_sent '
                '[$http_build_id]'
                '"$http_referer" "$http_user_agent"';

【问题讨论】:

    标签: http nginx http-headers


    【解决方案1】:

    如果您将其发送为HTTP_BUILD_ID,那么您应该在您的日志格式中使用"$http_http_build_id"

    另外,请检查您的虚拟主机(服务器)定义以确保它使用main 格式。一些默认安装如下所示:access_log FILE combined,其中combined 是预定义的格式。阅读更多关于here

    正如 OP 所指出的,安装 nginx-echo-headers 包指出了一些无效的标头。添加underscores_in_headers on; 解决了这个问题。

    【讨论】:

    • 标头 HTTP_USER_AGENT 显示为 $http_user_agent。而 HTTP_REFERER 被视为 $http_referer。我假设 HTTP_BUILD_ID 将被视为 $http_build_id。
    • x-forwarded-for。要记录它,它是http_x_forwarded_for。 User-Agent、Referrer,这些在浏览器发送时不以 HTTP 为前缀。在 nginx 中,要获取标头,请执行 http_HEADER。在你的情况下,因为你的标题是HTTP_BUILD_ID,所以你有双 http
    • 你的答案是半正确的。我使用了$http_build_id,但我需要修复一些配置。请更新您的答案。我使用github.com/brndnmtthws/nginx-echo-headers 来回显我的请求,然后意识到这是在说我的标头无效。然后我添加了underscores_in_headers on; 来解决这个问题。
    • @GGhe,谢谢,已更新。我将对此进行重新测试。感谢您深入了解这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2012-01-22
    • 2014-08-21
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多