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

原创
2016/05/11 17:44
阅读数 4.6K

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感兴趣。

 

展开阅读全文
打赏
3
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
3
分享
返回顶部
顶部