Apache:类似 Heroku 的 X-Request-ID

Apache:类似 Heroku 的 X-Request-ID

我喜欢X-Request-ID

Heroku 路由器会为收到的每个传入 HTTP 请求生成一个唯一的请求 ID。然后,此唯一 ID 将作为名为 X-Request-ID 的 HTTP 标头传递给您的应用程序。

https://devcenter.heroku.com/articles/http-request-id

X-Request-ID即使使用了多线程 MPM,我该如何配置 Apache 来提供不同的功能?

答案1

你需要做两件事:

  1. 加载唯一 ID 模块。这提供了用于此目的的 UNIQUE_ID 环境变量。

    LoadModule mod_unique_id.c
    
  2. 使用以下方法将 UNIQUE_ID 复制到X-Request-ID相应虚拟主机的标头中:RequestHeader指示。

    RequestHeader setifempty X-Request-ID %{UNIQUE_ID}e
    ProxyPass ...
    ProxyPassReverse ...
    

您也可以选择%{UNIQUE_ID}e输入自定义日志格式这样您就可以从 Apache 记录它(可能除了在您的应用程序内)。

答案2

您可能希望对标头的 %{UNIQUE_ID}e 值进行转义。本文将其描述为第一个例子: https://httpd.apache.org/docs/trunk/env.html#examples

#
# The following works around a client sending a broken Accept_Encoding
# header.
#
SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1
RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding

相关内容