Nginx 修改请求参数
最近有一个这样的需求:将 client 端请求参数的 udpPort 参数给抹掉,原请求 url 如下: /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=preview&clientIP=172.16.117.56&serviceName=xxx&udpPort=54795&clusters=
以上是 nacos client 请求服务提供者列表的接口,如果 udpPort 大于 0,则 nacos server 会向这个 ip 的这个端口推送数据,我是期望它不要推送,如果要它不推送,有两个方案:
- 禁止 nacos server 向外发送 udp 包;
- 使 client 传递的 udpPort 参数小于等于 0,该参数默认为 0;
禁用 udp 发包
禁用 udp 发包也简单:
sudo iptables -A OUTPUT -p udp -j DROP
恢复 udp 发包
禁用后,如需恢复可这样:
nginx 修改请求参数
但是这会影响所有服务,所以想了一个别的招,用 nginx 代理,但是删除 udpPort 参数,配置如下:
|
|
这里 $args 是:
app=unknown&healthyOnly=false&namespaceId=preview&clientIP=172.16.117.56&serviceName=xxx&udpPort=54795&clusters=
正则表达式的第一部分是任意字符重复一或多次,第二部分是以 &udpPort= 开头,然后任意字符重复一或多次,第三部分是以 & 开头,然后任意字符重复一或多次,这样一来,其含义如下:
$1:app=unknown&healthyOnly=false&namespaceId=preview&clientIP=172.16.117.56&serviceName=xxx&
$2:&udpPort=54795
$3:&clusters=
最后,使用 set $args 将参数调整为 $1$3 即删除 &udpPort=54795
最后更新于