fix(lua): 修复 remote_port 和 server_port 变量返回空值
- 实现 remote_port 从 RemoteAddr 正确解析端口 - 实现 server_port 从 LocalAddr 正确解析端口 - 使用 strings.LastIndex 兼容 IPv4/IPv6 地址格式 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
3d80b12f7d
commit
5354dceaf7
@ -19,6 +19,7 @@ package lua
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/valyala/fasthttp"
|
||||
glua "github.com/yuin/gopher-lua"
|
||||
@ -174,8 +175,12 @@ func (api *ngxVarAPI) getVariableLua(name string) glua.LValue {
|
||||
case "remote_port":
|
||||
addr := api.ctx.RemoteAddr()
|
||||
if addr != nil {
|
||||
// 简化处理,实际可能需要解析端口
|
||||
return glua.LString("")
|
||||
addrStr := addr.String()
|
||||
// IPv6 地址格式: [ip]:port,IPv4 格式: ip:port
|
||||
// 统一使用 LastIndex(":") 可正确处理两种格式
|
||||
if idx := strings.LastIndex(addrStr, ":"); idx >= 0 {
|
||||
return glua.LString(addrStr[idx+1:])
|
||||
}
|
||||
}
|
||||
return glua.LString("")
|
||||
case "binary_remote_addr":
|
||||
@ -189,6 +194,13 @@ func (api *ngxVarAPI) getVariableLua(name string) glua.LValue {
|
||||
}
|
||||
return glua.LString("")
|
||||
case "server_port":
|
||||
addr := api.ctx.LocalAddr()
|
||||
if addr != nil {
|
||||
addrStr := addr.String()
|
||||
if idx := strings.LastIndex(addrStr, ":"); idx >= 0 {
|
||||
return glua.LString(addrStr[idx+1:])
|
||||
}
|
||||
}
|
||||
return glua.LString("")
|
||||
case "server_name":
|
||||
return glua.LString(string(api.ctx.Host()))
|
||||
@ -259,6 +271,13 @@ func (api *ngxVarAPI) getVariable(name string) string {
|
||||
case "remote_addr":
|
||||
return api.ctx.RemoteAddr().String()
|
||||
case "remote_port":
|
||||
addr := api.ctx.RemoteAddr()
|
||||
if addr != nil {
|
||||
addrStr := addr.String()
|
||||
if idx := strings.LastIndex(addrStr, ":"); idx >= 0 {
|
||||
return addrStr[idx+1:]
|
||||
}
|
||||
}
|
||||
return ""
|
||||
case "binary_remote_addr":
|
||||
return ""
|
||||
@ -269,6 +288,13 @@ func (api *ngxVarAPI) getVariable(name string) string {
|
||||
}
|
||||
return ""
|
||||
case "server_port":
|
||||
addr := api.ctx.LocalAddr()
|
||||
if addr != nil {
|
||||
addrStr := addr.String()
|
||||
if idx := strings.LastIndex(addrStr, ":"); idx >= 0 {
|
||||
return addrStr[idx+1:]
|
||||
}
|
||||
}
|
||||
return ""
|
||||
case "server_name":
|
||||
return string(api.ctx.Host())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user