在 OpenResty 中,您可以使用 Nginx 提供的变量来解析 HTTP 请求的 Host 字段,并从中获取 IP 地址和端口号。通常,Host 字段会包含主机名或 IP 地址及其对应的端口号。
以下是一个示例代码片段,演示如何在 OpenResty 中解析请求的 Host 字段,并提取出 IP 地址和端口号(支持 IPv4 和 IPv6):
location /get-host {
    content_by_lua_block {
        -- 获取 Host 字段
        local host = ngx.var.http_host
        -- 检查是否包含冒号 (:) 来区分 IP 和端口
        local ip, port = host:match("^(.*):(%d+)$")
        if not ip then
            -- 如果没有指定端口,则将port设置为 nil 或者默认值
            ip = host
            port = ngx.var.server_port  -- 使用当前服务器的端口作为默认值
        end
        -- 输出结果
        ngx.say("Request Host: ", host)
        ngx.say("IP Address: ", ip)
        ngx.say("Port: ", port)
    }
}
说明:
- ngx.var.http_host:获取请求中的 
Host字段。 - string.match():通过正则表达式来匹配 
host的格式。如果存在冒号,则将其分为 IP 和端口;否则,IP 设置为host,并使用当前请求的服务器端口。 - 输出请求的完整主机、提取到的 IP 地址和端口号。
 
注意事项:
- 当客户端请求时,如果在 URL 中指定了非标准端口(例如,在浏览器中输入 
http://[::1]:8080/),这时也能够正确识别并输出。 - 如果客户端仅提供了主机名或 IP 而没有附加端口信息,可以用 
ngx.var.server_port来获得实际处理请求所使用的服务器端口。 
通过这种方式,您可以有效地解析 HTTP 请求中的主机字段,并提取必要的信息。如果有其他问题或需要进一步帮助,请告诉我!
内容由零声教学AI助手提供,问题来源于学员提问


        
        
        
        
        
        
        
        
        
                
                
                
                
                
                
                