我的源服务器前面有cdn , 日志记录的 $remote_addr 是cdn节点的ip, $http_x_forwarded_for 这个记录的真实的用户ip (用户ip未有伪造的情况下), 我想问问,源服务器前面有cdn的话,怎样才能获取真实的用户ip?ps 如果客户端直接连接源服务器, $remote_addr 这个能获取用户真实ip,用户ip比较难伪造。 ngx.req.get_headers()["X-Real-IP"] 这个是不是还是从http header头获取用户ip? --
http 头里面的信息是可以被中间服务器处理和产生的。比如你和 cdn 那边商量好,他们把所有传给他们的 x-forwarded_for 头丢弃,然后设置这个头为 remote_addr,那就和你直接拿 remote_addr 没区别了。只是举个例子。2015-07-19 18:48 GMT+08:00 kobeng <benw...@gmail.com>:我的源服务器前面有cdn , 日志记录的 $remote_addr 是cdn节点的ip, $http_x_forwarded_for 这个记录的真实的用户ip (用户ip未有伪造的情况下), 我想问问,源服务器前面有cdn的话,怎样才能获取真实的用户ip?ps 如果客户端直接连接源服务器, $remote_addr 这个能获取用户真实ip,用户ip比较难伪造。 ngx.req.get_headers()["X-Real-IP"] 这个是不是还是从http header头获取用户ip? --
ngx.req.get_headers()默认全小写吧
$cat /tmp/test.lua ngx.say(ngx.req.get_headers()["X-Real-IP"]) ngx.say(ngx.req.get_headers()["REMOTE_ADDR"]) ngx.say(ngx.var.remote_addr) ---------------- $ curl http://localhost/lua/ nil nil 127.0.0.1 ---------------- $ curl http://localhost/lua/ -H'REMOTE-ADDR:1.2.3.4' -H'X-REAL-IP:1.2.3' 1.2.3 1.2.3.4 127.0.0.1 ---------------- $ curl http://localhost/lua/ -H'REMOTE_ADDR:1.2.3.4' -H'X-REAL-IP:1.2.3' 1.2.3 nil 127.0.0.1 在 8/15/15 13:18, 牧童 写道: