2,190
社区成员
发帖
与我相关
我的任务
分享
// IP 获取真实IP
func (ctx *context) IP() string {
if ctx.req == nil {
panic("Please initialize before use context")
}
addr := ctx.req.Header.Get("X-Real-IP")
if addr != "" {
return addr
}
ips := ctx.IPs()
if len(ips) > 0 && ips[0] != "" {
ip, _, err := net.SplitHostPort(ips[0])
if err != nil {
ip = ips[0]
}
return ip
}
addr = ctx.req.RemoteAddr
if ip, _, err := net.SplitHostPort(addr); err == nil {
return ip
}
return ctx.req.RemoteAddr
}
// IPs 获取 IP 数组,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP数组中
func (ctx *context) IPs() []string {
if ips := ctx.Header("X-Forwarded-For"); ips != "" {
return strings.Split(ips, ",")
}
return []string{}
}
有没有用 nginx 之类的代理,会不会是设置的不正确?