Eva*_*van 6 tomcat haproxy x-forwarded-for
在我的 HAProxy 负载均衡器中,我有以下配置块:
defaults
mode http
log global
option httplog clf
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
frontend main_http *:80
option forwardfor except 127.0.0.1
option httpclose
default_backend backend_http
backend backend_http
balance roundrobin
option httpchk
server node1 10.0.0.64:80 check port 80
server node2 10.0.0.65:80 check port 80
server node3 10.0.0.66:80 check port 80
Run Code Online (Sandbox Code Playgroud)
在节点 (Tomcat) 上,我以这种格式记录请求(与第一个字段中的 x-forwarded-for 和真正的 REMOTE_ADDR 相结合):
pattern='%{X-Forwarded-For}i - %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %a'
Run Code Online (Sandbox Code Playgroud)
这似乎适用于大多数请求,但在某些情况下,我假设客户端位于代理后面,我看到第一个字段包含这些值的请求(每行代表一个真实请求,我破坏了真实 IP隐私):
10.83.103.44, 10.83.103.44
10.83.198.52, 10.83.198.52
10.53.109.36, 10.53.109.36
unknown, unknown
192.168.1.43, 127.0.0.1
192.168.11.189, 127.0.0.1
10.1.6.3, 216.x.y.194, 10.37.52.202
192.168.50.250, 38.x.y.5, 10.37.31.201
Run Code Online (Sandbox Code Playgroud)
根据 HAproxy 文档,最后一个 X-Forwarded-For 应该是它附加的正确的,但事实并非如此。我的应用程序使用客户端 IP 进行地理查找,所以这不仅仅是一个日志问题,它实际上是把事情搞砸了。
我想做的是:与其让 HAproxy 将客户端的 IP 附加到它接收到的现有 X-Forwarded-For 标头,不如简单地覆盖它。因此,如果它X-Forwarded-For: 10.1.2.3
从 IP 地址 98.76.54.32接收,它将发送给客户端的只是X-Forwarded-For: 98.76.54.32
. 有没有办法做到这一点?我想知道为什么如此明显的垃圾会进入节点 -unknown, unknown
显然是垃圾信息 - 但如果存在,我会满足于解决方法。
提前致谢。
Sha*_*den 13
在 HAProxy 添加自己的请求头之前,将其从请求头中撕下:
reqidel ^X-Forwarded-For:.*
Run Code Online (Sandbox Code Playgroud)
此更改的风险在于您将丢失有关“真实”客户端 IP 地址的信息 - 然后您的日志将显示客户端正在使用的代理服务器的 IP。听起来你没问题!
顺便说一句,请参阅此问题以获取有关X-Forwarded-For
标题附加顺序混淆的一些有趣信息。
归档时间: |
|
查看次数: |
12979 次 |
最近记录: |