Skip to main content
Version: 3.8

real-ip

描述#

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

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

IMPORTANT

该插件要求 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中发送的最后一个非受信任地址。
note

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

启用插件#

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

curl -i http://127.0.0.1:9180/apisix/admin/routes/1  \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/index.html",
"plugins": {
"real-ip": {
"source": "arg_realip",
"trusted_addresses": ["127.0.0.0/24"]
},
"response-rewrite": {
"headers": {
"remote_addr": "$remote_addr",
"remote_port": "$remote_port"
}
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'

测试插件#

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

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

删除插件#

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

curl http://127.0.0.1:9180/apisix/admin/routes/1  \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'