Skip to content

Commit

Permalink
feat: add overwrite XFF
Browse files Browse the repository at this point in the history
  • Loading branch information
Paxxs committed Feb 28, 2022
1 parent 9705e19 commit c674eb2
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 2 deletions.
1 change: 1 addition & 0 deletions .traefik.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ testData:
- proxyHeadername: X-From-Cdn
proxyHeadervalue: cdn3
realIP: Cf-Connecting-Ip
overwriteXFF: true
- proxyHeadername: "*"
realIP: RemoteAddr
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,11 @@ http:
- proxyHeadername: X-From-Cdn
proxyHeadervalue: mf-bar
realIP: Client-Ip
OverwriteXFF: true
- proxyHeadername: X-From-Cdn
proxyHeadervalue: cf-foo
realIP: Cf-Connecting-Ip
OverwriteXFF: true
- proxyHeadername: "*"
realIP: RemoteAddr

Expand Down
8 changes: 6 additions & 2 deletions get_real_ip.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type Proxy struct {
ProxyHeadername string `yaml:"proxyHeadername"`
ProxyHeadervalue string `yaml:"proxyHeadervalue"`
RealIP string `yaml:"realIP"`
OverwriteXFF bool `yaml:"overwriteXFF"` // override X-Forwarded-For
}

// Config the plugin configuration.
Expand Down Expand Up @@ -53,8 +54,8 @@ func (g *GetRealIP) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
// fmt.Println("☃️当前配置:", g.proxy, "remoteaddr", req.RemoteAddr)
var realIP string
for _, proxy := range g.proxy {
fmt.Printf("🐸 Current Proxy:%s\n", proxy.ProxyHeadervalue)
if req.Header.Get(proxy.ProxyHeadername) == "*" || (req.Header.Get(proxy.ProxyHeadername) == proxy.ProxyHeadervalue) {
fmt.Printf("🐸 Current Proxy:%s\n", proxy.ProxyHeadervalue)
// CDN来源确定
nIP := req.Header.Get(proxy.RealIP)
if proxy.RealIP == "RemoteAddr" {
Expand All @@ -77,7 +78,10 @@ func (g *GetRealIP) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
}
// 获取到后直接设定 realIP
if realIP != "" {
// req.Header.Set(xForwardedFor, realIP)
if proxy.OverwriteXFF {
fmt.Println("🐸 Modify XFF to:", realIP)
req.Header.Set(xForwardedFor, realIP)
}
req.Header.Set(xRealIP, realIP)
break
}
Expand Down

0 comments on commit c674eb2

Please sign in to comment.