在 nginx 配置文件中可以通过 $remote_addr 获取到客户端的 IP 地址,但是在一些情况下,通过这种方式获取到的 IP 地址可能不是客户端真实的 IP 地址,比如客户端在使用代理服务器时。此时可以通过 lua 脚本结合 nginx 获取客户端真实的 IP 地址。

具体步骤如下:

  1. 在 nginx 配置文件中添加以下内容:
location / {
    access_by_lua_file 'path/to/script.lua';
}
  1. 创建一个名为 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()
  1. 在需要获取客户端 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 地址了

lua 结合 nginx 获取客户端真实ip地址

原文地址: https://www.cveoy.top/t/topic/cpTk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录