real-ip

描述

real-ip 插件用于动态改变传递到 Apache APISIX 的客户端的 IP 地址和端口。

它的工作方式和 NGINX 中的 ngx_http_realip_module 模块一样,并且更加灵活。

real-ip - 图1IMPORTANT

该插件要求 APISIX 运行在 APISIX-Runtime 上。

属性

名称类型必选项有效值描述
sourcestring任何 NGINX 变量,如 arg_realiphttp_x_forwarded_for动态设置客户端的 IP 地址和端口,或主机名。如果该值不包含端口,则不会更改客户端的端口。
trusted_addressesarray[string]IP 或 CIDR 范围列表。动态设置 set_real_ip_from 字段。
recursivebooleantrue 或者 false,默认是 false如果禁用递归搜索,则与受信任地址之一匹配的原始客户端地址将替换为配置的source中发送的最后一个地址。如果启用递归搜索,则与受信任地址之一匹配的原始客户端地址将替换为配置的source中发送的最后一个非受信任地址。
real-ip - 图2note

如果 source 属性中设置的地址丢失或者无效,该插件将不会更改客户端地址。

启用插件

以下示例展示了如何在指定路由中启用 real-ip 插件:

  1. curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  3. {
  4. "uri": "/index.html",
  5. "plugins": {
  6. "real-ip": {
  7. "source": "arg_realip",
  8. "trusted_addresses": ["127.0.0.0/24"]
  9. },
  10. "response-rewrite": {
  11. "headers": {
  12. "remote_addr": "$remote_addr",
  13. "remote_port": "$remote_port"
  14. }
  15. }
  16. },
  17. "upstream": {
  18. "type": "roundrobin",
  19. "nodes": {
  20. "127.0.0.1:1980": 1
  21. }
  22. }
  23. }'

测试插件

通过上述命令启用插件后,可以使用如下命令测试插件是否启用成功:

  1. curl 'http://127.0.0.1:9080/index.html?realip=1.2.3.4:9080' -I
  1. ...
  2. remote-addr: 1.2.3.4
  3. remote-port: 9080

删除插件

当你需要禁用 real-ip 插件时,可以通过以下命令删除相应的 JSON 配置,APISIX 将会自动重新加载相关配置,无需重启服务:

  1. curl http://127.0.0.1:9180/apisix/admin/routes/1 \
  2. -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  3. {
  4. "uri": "/index.html",
  5. "upstream": {
  6. "type": "roundrobin",
  7. "nodes": {
  8. "127.0.0.1:1980": 1
  9. }
  10. }
  11. }'