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 (
|
import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/valyala/fasthttp"
|
"github.com/valyala/fasthttp"
|
||||||
glua "github.com/yuin/gopher-lua"
|
glua "github.com/yuin/gopher-lua"
|
||||||
@ -174,8 +175,12 @@ func (api *ngxVarAPI) getVariableLua(name string) glua.LValue {
|
|||||||
case "remote_port":
|
case "remote_port":
|
||||||
addr := api.ctx.RemoteAddr()
|
addr := api.ctx.RemoteAddr()
|
||||||
if addr != nil {
|
if addr != nil {
|
||||||
// 简化处理,实际可能需要解析端口
|
addrStr := addr.String()
|
||||||
return glua.LString("")
|
// IPv6 地址格式: [ip]:port,IPv4 格式: ip:port
|
||||||
|
// 统一使用 LastIndex(":") 可正确处理两种格式
|
||||||
|
if idx := strings.LastIndex(addrStr, ":"); idx >= 0 {
|
||||||
|
return glua.LString(addrStr[idx+1:])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return glua.LString("")
|
return glua.LString("")
|
||||||
case "binary_remote_addr":
|
case "binary_remote_addr":
|
||||||
@ -189,6 +194,13 @@ func (api *ngxVarAPI) getVariableLua(name string) glua.LValue {
|
|||||||
}
|
}
|
||||||
return glua.LString("")
|
return glua.LString("")
|
||||||
case "server_port":
|
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("")
|
return glua.LString("")
|
||||||
case "server_name":
|
case "server_name":
|
||||||
return glua.LString(string(api.ctx.Host()))
|
return glua.LString(string(api.ctx.Host()))
|
||||||
@ -259,6 +271,13 @@ func (api *ngxVarAPI) getVariable(name string) string {
|
|||||||
case "remote_addr":
|
case "remote_addr":
|
||||||
return api.ctx.RemoteAddr().String()
|
return api.ctx.RemoteAddr().String()
|
||||||
case "remote_port":
|
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 ""
|
return ""
|
||||||
case "binary_remote_addr":
|
case "binary_remote_addr":
|
||||||
return ""
|
return ""
|
||||||
@ -269,6 +288,13 @@ func (api *ngxVarAPI) getVariable(name string) string {
|
|||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
case "server_port":
|
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 ""
|
return ""
|
||||||
case "server_name":
|
case "server_name":
|
||||||
return string(api.ctx.Host())
|
return string(api.ctx.Host())
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user