nginx args urldecode 及nginx access_log中双引号被解析为x22问题解决方案


    工作中遇到使用http的get请求上报数据,参数为urlencode之后的值,想在nginx这儿urldecode之后再反向代理到下一级服务器.如何对nginx的$args进行urldecode呢,使用lua:

 set_by_lua $args 
 '
	return string.gsub(ngx.var.args, "%%(%x%x)", function(h) return string.char(tonumber(h, 16))
 ';

    这样$args中为urldecode之后的值。

    但是,另外一个问题,在使用access_log落日志,并且log_format中有$args时,由于nginx使用双引号作为分隔符,所以会强制将$args中的双引号换成x22。这个问题目前没有找到解决方案,google到的一个基本可以解决但是不建议的方案是在旋转脚本中将所有的x22替换成双引号。

你可能感兴趣的:(lua,nginx)