lua 结合 nginx 获取客户端真实ip地址
在 nginx 配置文件中可以通过 $remote_addr 获取到客户端的 IP 地址,但是在一些情况下,通过这种方式获取到的 IP 地址可能不是客户端真实的 IP 地址,比如客户端在使用代理服务器时。此时可以通过 lua 脚本结合 nginx 获取客户端真实的 IP 地址。
具体步骤如下:
- 在 nginx 配置文件中添加以下内容:
location / {
access_by_lua_file 'path/to/script.lua';
}
- 创建一个名为 script.lua 的文件,并添加以下内容:
-- 获取客户端真实 IP 地址
function get_ip()
local headers = ngx.req.get_headers()
local ip = headers["X-Real-IP"] or headers["X-Forwarded-For"] or ngx.var.remote_addr
if ip then
local ips = {}
for v in string.gmatch(ip, "[%d%.]+") do
table.insert(ips, v)
end
ip = ips[1]
end
return ip
end
-- 将获取到的客户端 IP 地址存储在变量中
ngx.var.client_ip = get_ip()
- 在需要获取客户端 IP 地址的地方,使用 $client_ip 变量即可获取到客户端真实的 IP 地址:
location /test {
# 获取客户端真实 IP 地址
access_by_lua_file 'path/to/script.lua';
# 使用 $client_ip 变量获取客户端 IP 地址
add_header X-Client-IP $client_ip;
}
通过以上步骤,就可以使用 lua 脚本结合 nginx 获取客户端真实的 IP 地址了
原文地址: https://www.cveoy.top/t/topic/cpTk 著作权归作者所有。请勿转载和采集!