将 apache 配置为不使用 x-forwarded-host 标头作为主机名



当我向 Apache 请求时,我收到了一个 400 个错误请求,如果我的请求有 x 转发主机标头超过 1 个看起来像

www.a.com, www.b.com

我从这个请求中记录Apache,Apache使用x-forwarded-host作为主机名。Apache 日志看起来像这样

[核心:调试] [PID 18] vhost.c(796(: [客户端 172.17.0.7:51726] AH02415: [严格] 无效的主机名"www.a.com,www.b.com",问题接近:,www.b

[核心:调试] [PID 18] vhost.c(891(: [客户端 172.17.0.7:51726] AH00550:客户端发送格式错误的主机标头:www.a.com,www.b.com

[核心:调试] [PID 18] protocol.c(1393(: [客户端 172.17.0.7:51726] AH00569:客户端发送的不带主机名的 HTTP/1.1 请求(请参阅RFC2616第 14.23 节(:/[标头:调试][PID 18] mod_headers.c(900(: AH01503: 标题: ap_headers_error_filter(( 172.17.0.5:80 172.17.0.7 - - [28/Sep/2018:10:27:44 +0000] "GET/HTTP/1.1" 400 0 "-" ">

我必须配置 Apache 不要使用 x-forward-host 作为主机名。如何在 Apache 中配置它?

该标头由 Apache 前面的设备发送。充当代理的设备会添加此标头。 所以你正在接收它。 如果不希望它在日志中,请更改日志的格式描述符。

例如:默认日志格式

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common

以及我在生产服务器上使用的那个:

LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

当我定义access_log时,我会使用它:

CustomLog logs/access_log combined


如果我删除%{X-Forwarded-For}i并将其替换为默认%h,则"双"主机名(或IP(不再显示。

如果这不适用于您的配置,请从配置文件中添加 LogFormat 和 CustomLog 指令,以便我们可以对其进行注释。

最新更新