使用nginx配置处理querystring中的一个空格

Jetty-9 warning: badMessage: 400 Illegal character

http://stackoverflow.com/questions/25625410/jetty-9-warning-badmessage-400-illegal-character

后来的后来我知道了这是jetty的一个bug。

先说问题,url参数yyy需要回传encode/decode 。有天收到微信预警信息,ngx每个小时都会有一些400的请求。定位了一下日志,发现中间的一个参数包含了空格,

大概是这样的:

http://xxx.xxx.com?xxx=xxx&yyy=y y&zzz=zzz

开始觉得很简单,一个rewrite规则搞定,但嗖嗖嗖折腾了一大圈,没啥反应,400还是400。
然后在这里发现rewrite是针对uri的 ,其实不能做querystring 的 replace操作,但他这里提供了一个思路实现类似的replace操作,感谢!
http://blog.sina.com.cn/s/blog_40d47c8901019s26.html


所以我在对应的ngx配置文件里location配置项开头加上这句,意思是如果请求query串里有一空格,就把这个空格替换成下划线。
   if ( $args ~ '^(.*) (.*)$' ){
      set $args $1_$2;
   }

重载配置
nginx -s reload
然后世界就清净了,很久没有再收到400的预警了。


$args 代表的就是querystring 
~ 匹配
'^(.*) (.*)$' 匹配那些中间有一个空格的字符串,若符合条件则前一半可用$1取到,后一半可用$2取到。

每天要和小伙伴超神一把的程序员,会写python,对ngx感兴趣。

 

转载于:https://my.oschina.net/ois/blog/673575

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值