根据路线纠正日志格式

根据路线纠正日志格式

我在服务器上运行了一些虚拟主机,其中一些是通过 CDN 并且已X-Forward-For添加到 headersr,有时它只是通过RemoteIPHeader添加的负载均衡器。

我有 3 个自定义日志配置:

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

在我的虚拟主机配置中,我使用 lb、组合或代理作为日志格式。

当我添加RemoteIPHeader X-Forwarded-For设置客户端 IP 而不是负载均衡器 IP 时,lb 日志正常工作,但代理日志使用 LB IP。当我删除时,RemoteIPHeader X-Forwarded-For代理日志具有客户端 IP,但 lb 日志具有负载均衡器 IP。这很有意义,因为我需要X-Forwarded-For根据 CDN 是否已设置它来有条件地设置。

我曾尝试这样做:

<IfModule mod_headers>
    RequestHeader set X-Forward-For RemoteIPHeader expr="req('X-Forward-For')==''"
</IfModule>

从这个问题但是它什么也没做。如果这样做,<IfModule mod_headers.c>就会产生语法问题,如果我把上面的代码放到我设置日志的位置,它会说RequestHeader set X-Forward-For RemoteIPHeader expr="req('X-Forward-For')==''"有一个意外的 $end。

如何X-Forward-For根据是否从 CDN 设置来正确设置?

相关内容