feat: 连接列表显示客户端真实 IP,支持反代和 CDN 场景
新增可配置的 real_ip_headers(默认 CF-Connecting-IP > X-Real-IP > X-Forwarded-For 降级取值),trusted_proxies 用于 gin 代理信任链。 WebSocket 连接建立时捕获真实 IP 并在 /profile 和 /admin 连接列表展示, 登录会话 IP 同步改用真实 IP。
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
var realIPHeaders []string
|
||||
|
||||
func SetRealIPHeaders(headers []string) {
|
||||
realIPHeaders = headers
|
||||
}
|
||||
|
||||
func GetRealIP(c *gin.Context) string {
|
||||
for _, header := range realIPHeaders {
|
||||
val := c.GetHeader(header)
|
||||
if val == "" {
|
||||
continue
|
||||
}
|
||||
ip := strings.TrimSpace(strings.Split(val, ",")[0])
|
||||
if ip != "" && net.ParseIP(ip) != nil {
|
||||
return ip
|
||||
}
|
||||
}
|
||||
return c.ClientIP()
|
||||
}
|
||||
Reference in New Issue
Block a user