2018年6月

解决由于Url中包含特殊字符导致nginx中报400错误

由于有一些链接在客户端没有urlencode,导致链接中包含{}这样的特殊字符,例如:http://tla.ciiika.com/track/redirect?type=2&index=1&serverVersion=7.6&country=hk&date=20180604033642&clickId={click_id}&gaid={gaid}
解决办法:
把{}去掉

if ( $args ~ '^(.+)(\{click_id\})(.*)$' ){
    set $args $1$3;
}
if ( $args ~ '^(.+)(\{gaid\})(.*)$' ){
    set $args $1$3;
} 

因为这个占位符应该是在客户端被替换或者被encoding的,此时传到服务端已经没有用处了。
这样修改后日志没有关于此类400的错误了,能正常跳转。