我使用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使用它作为远程地址(看起来像这样做的方式)。