MCPcopy Index your code
hub / github.com/Paxxs/traefik-get-real-ip

github.com/Paxxs/traefik-get-real-ip @v1.0.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.4 ↗ · + Follow
14 symbols 31 edges 2 files 10 documented · 71% updated 5mo agov1.0.4 · 2026-01-22★ 861 open issues

Browse by type

Functions 11 Types & classes 3
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Traefik 获取真实 IP 地址

当 Traefik 部署在多个负载均衡器后面时,可以使用此插件检测不同的负载均衡器并从不同的头部字段提取真实 IP,然后将该值输出到 x-real-ip 头部。

此插件可以通过检查负载均衡器接收到的头部信息值是否匹配来防止 IP 欺骗,然后再提取 IP 地址。

例如,在下面展示的 CloudFlare 负载均衡器配置中,我们将其配置为只接受头部 x-from-cdn 且值等于 cf-foo,并从 Cf-Connecting-Ip 头部提取 IP 地址。由于用户永远不知道 x-from-cdn 头部的存在或其所需的值 cf-foo,因此它保持安全 🛡️。为了增加复杂性并避免被猜测,您可以使用随机字符串 :)

 CloudFlare
┌─────────┐
│         ├────────────────────────────────►  ┌───────┬────────┐
└─────────┘ x-from-cdn:cf-foo                 │       │        │
            Cf-Connecting-Ip: realip          │       │        │
 CDN2                                         │       │        │
┌─────────┐                                   │       │ paxxs's│
│         ├────────────────────────────────►  │traefik│        │ x-real-ip:realip
└─────────┘ x-from-cdn:mf-bar                 │       │Get-rea ├─────────────►
            Client-iP: realip                 │       │ l-ip   │
 CDN3                                         │       │Plugin  │
┌─────────┐                                   │       │        │
│         ├───────────────────────────────►   │       │        │
└─────────┘ x-from-cdn:mf-fun                 └───────┴────────┘
            x-forwarded-for: realip,x.x.x.x
                           (truthedIP)          ▲  ▲
                                                │  │
 ┌────────┐                                     │  │
 └────────┘ ────────────────────────────────────┘  │
   "*"                                             │
 ┌────────┐                RemoteAddr/etc..        │
 └────────┘ ───────────────────────────────────────┘

CDN 配置

例如 Cloudflare:

规则 > 转换规则 > HTTP 请求头部修改 > 添加 - 设置静态头部: X-From-Cdn - 值: cf-foo

image

image

Traefik 配置

静态配置

插件信息: - 模块名称: github.com/Paxxs/traefik-get-real-ip - 版本: [请填写最新版本!]

Traefik 配置: - yml - toml - docker-labels

pilot:
  token: [已编辑]

experimental:
  plugins:
    real-ip:
      moduleName: github.com/Paxxs/traefik-get-real-ip
      version: [请填写最新版本!]

动态配置

  • yml
  • toml
  • docker labels
  • Kubernetes
http:
  middlewares:
    real-ip-foo:
      plugin:
        real-ip:
          enableLog: false # 默认: false,启用以查看详细日志
          deny403OnFail: true # 默认: false,设为true时,如果没有匹配的CDN头部则返回403错误
          eraseProxyHeaders: true # 默认: false,处理后擦除CDN特定头部
          Proxy:
            - proxyHeadername: X-From-Cdn
              proxyHeadervalue: mf-fun
              realIP: X-Forwarded-For
            - proxyHeadername: X-From-Cdn
              proxyHeadervalue: mf-bar
              realIP: Client-Ip
              OverwriteXFF: true # 默认: false,v1.0.2 或更高版本
            - proxyHeadername: X-From-Cdn
              proxyHeadervalue: cf-foo
              realIP: Cf-Connecting-Ip
              OverwriteXFF: true # 默认: false,v1.0.2 或更高版本
            - proxyHeadername: "*"
              realIP: RemoteAddr

  routers:
    my-router:
      rule: Host(`localhost`)
      middlewares:
        - real-ip-foo
      service: my-service

  services:
    my-service:
      loadBalancer:
        servers:
          - url: 'http://127.0.0.1'

配置选项

选项 类型 必需 默认值 说明
enableLog bool false 启用详细日志记录,用于调试目的
deny403OnFail bool false 设为true时,如果没有找到匹配的CDN头部,则返回403禁止访问响应
eraseProxyHeaders bool false 设为true时,处理后会擦除CDN特定头部,防止CDN识别信息泄露
Proxy array - 代理配置数组

Proxy 配置

选项 类型 必需 默认值 说明
proxyHeadername string - 用于CDN识别的头部名称。使用"*"可匹配所有来源
proxyHeadervalue string - 头部的预期值。当proxyHeadername为"*"时不需要
realIP string - 用于提取真实IP的头部。特殊值"RemoteAddr"将使用连接的远程地址
OverwriteXFF bool false 设为true时,还会用提取的真实IP覆盖X-Forwarded-For头部(v1.0.2+)

处理逻辑

  1. 插件按顺序检查每个代理配置。
  2. 对于每个配置,它检查请求是否具有指定的proxyHeadername和值proxyHeadervalue(如果proxyHeadername为"*",则接受任何请求)。
  3. 找到匹配项后,从realIP指定的头部提取IP。
  4. 提取的IP被设置为X-Real-Ip头部。
  5. 如果OverwriteXFF为true,X-Forwarded-For头部也会被提取的IP覆盖。
  6. 如果eraseProxyHeaders为true,插件会删除CDN特定的头部(匹配的proxyHeadernamerealIP头部),以防止将CDN识别信息泄露给下游服务。标准头部如X-Forwarded-For会被保留。
  7. 如果没有找到匹配的代理配置,且deny403OnFail设置为true,插件将返回403 Forbidden响应,阻止进一步的请求处理。
  8. 否则,请求将传递给下一个处理程序。

Core symbols most depended-on inside this repo

Shape

Function 8
Method 3
Struct 3

Languages

Go100%

Modules by API surface

get_real_ip.go8 symbols
get_real_ip_test.go6 symbols

For agents

$ claude mcp add traefik-get-real-ip \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page