修复一个nginx-http-concat发生400错误的问题
发布/
小网
数据源/原创
“nginx-http-concat”是一个淘宝的开源Nginx模块,是一个能把多个CSS和JS合并成一个请求的Nginx模块。
使用ngx-http-concat加载JS偶尔出现加载不出来的情况,HTTP返回400错误。
通过开发者工具,打开网络面板,找到400错误的请求地址。
1. 分析http的header,发现没有该有的http都存在;
2. 分析异常的请求地址,对比正常的后,发现在地址后多了一个“&_txxxx=xx”的参数,导致进入到ngx-http-concat模块后出现异常。
打开“ngx_http_concat_module.c”文件,找到 “ngx_http_concat_handler”里遍历解析args的for循环,替换成如下代码。
for (p = r->args.data + 1, v = p; p != e; p++) { /* 修复在被劫持后添加参数导致400错误使其加载失败的问题 */ /* 如果碰到 & 或 # 时,则直接跳出循环 */ if(*p == '&' || *p == '#'){ break; }else if (*p == ',') { rc = ngx_http_concat_add_path(r, &uris, clcf->max_files, &path, p, v); if (rc != NGX_OK) { return rc; } v = p + 1; } else if (*p == '?') { rc = ngx_http_concat_add_path(r, &uris, clcf->max_files, &path, p, v); if (rc != NGX_OK) { return rc; } v = p; break; } }