29 lines
488 B
Go
29 lines
488 B
Go
/**
|
|
* package utils
|
|
* 作用:从 HTTP 请求中提取客户端真实 IP
|
|
*/
|
|
package utils
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
/**
|
|
* GetClientIP
|
|
* 功能:优先从代理头获取,否则使用 Gin ClientIP
|
|
*/
|
|
func GetClientIP(c *gin.Context) string {
|
|
ip := c.GetHeader("X-Forwarded-For")
|
|
if ip != "" {
|
|
parts := strings.Split(ip, ",")
|
|
return strings.TrimSpace(parts[0])
|
|
}
|
|
ip = c.GetHeader("X-Real-IP")
|
|
if ip != "" {
|
|
return ip
|
|
}
|
|
return c.ClientIP()
|
|
}
|