访客IP地址

可以在服务”设置”–“访客IP地址”中设置访客的IP地址获取方式。

影响范围

访客IP地址设置会应用于记录访问日志、检查IP黑白名单、WAF地区封禁、IP并发限制等处。

选项说明

直接获取

用户直接访问边缘节点,即 “用户 –> 边缘节点” 模式,这时候可以直接从连接中读取到真实的IP地址。

从上级代理中获取

用户和边缘节点之间有别的代理服务转发,即 “用户 –> [第三方代理服务] –> 边缘节点”,这时候只能从上级代理中获取传递的IP地址。

用户首先访问的第三方代理服务,比如Nginx或者Squid之类的反向代理服务,再通过这些服务转发到GoEdge的边缘节点,边缘节点上可以自动从 X-Real-IPX-Forwarded-For 两个Header中获取用户的真实IP。

自定义

可以自定义变量,在 这里 可以查看支持的请求变量。

错误处理

如果从选项或者变量值获得的IP地址格式是错误的(非IPv4和IPv6格式),则自动使用直接连接边缘节点的连接IP地址。

第三方代理示例

从Nginx传递客户端IP地址到边缘节点

如果Nginx处在GoEdge的下游(就是”用户” –> Nginx –> GoEdge),可以在Nginx中使用 X-Real-IP Header将获取的IP地址传递给GoEdge:

  1. server {
  2. ...
  3. location / {
  4. proxy_pass http://127.0.0.1:8005; # proxy_pass $GOEDGE节点地址
  5. proxy_set_header X-Real-IP $remote_addr; # 设置 X-Real-IP
  6. }
  7. }

源站读取IP

默认地,边缘节点会传递 X-Real-IPX-Forwarded-For 两个Header到源站,其中X-Real-IP只可能为单个IP,而 X-Forwarded-For中可能包含有多个IP:

  1. # X-Forwarded-For语法
  2. X-Forwarded-For: <client>, <proxy1>, <proxy2>
  3. # 示例
  4. X-Forwarded-For: 192.168.2.100, 192.168.2.1, 127.0.0.1

从上面示例中可以看出,要获取X-Forwarded-For中的IP值需要分隔多个IP并读取第一个。

PHP读取客户端IP示例

  1. $_SERVER["HTTP_X_FORWARDED_FOR"]
  2. $_SERVER["HTTP_X_REAL_IP"]

Go读取客户端IP示例

  1. req.Header.Get("X-Forwarded-For")
  2. req.Header.Get("X-Real-Ip") // 注意这里的Ip格式