错误的IP与lighttpd反向代理

我使用lighttpd反向代理服务django与gunicorn。 现在这个configuration工作:

proxy.server = ("" => ( "" => ( "host" => "127.0.0.1", "port" => 8000, ))) 

现在我把枪炮移到一个容器里,使用:

 proxy.server = ("" => ( "" => ( "host" => "192.168.1.2", "port" => 8000, ))) 

现在每个请求都有一个由gunicorn看到的ip 192.168.1.1 。 我会明白,如果反向代理混淆真实的IP,但为什么它与本地主机然后呢?

因为我得到

 X-Forwarded-For: client-ip X-Host: the.domain X-Forwarded-Proto: http 

客户端IP是公共IP空间。

请求来自

主办:

 nc: connect to 127.0.0.1 8000 from localhost (127.0.0.1) 44953 [44953] 

容器:

 nc: connect to 192.168.1.2 8000 from host (192.168.1.1) 60027 [60027] 

容器本身的IP为192.168.1.2 ,主桥为192.168.1.1 ,容器内的路由为:

 default via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2 

主持人有:

 192.168.1.0/24 dev bridge proto kernel scope link src 192.168.1.1 

编辑:X-Forwarded-For是两个请求相同。 (用nc -vlp 8000testing)。

我打赌? lighttpd正在添加一个X-Forwarded-For头文件,Django在某处硬编码,以知道如果该头文件存在, 127.0.0.1不太可能成为真正的远程IP地址。

你应该validationX-Forwarded-For头是否存在,然后让Django使用它作为远程地址(看起来像这样做的方式)。