nginx添加lua模块
nginx是使用编译的方式安装的,所以重新编译安装。编译命令如下:
./configure --prefix=/eetop/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-threads --user=www --group=www --add-module=/lua-nginx-module-0.10.15 --add-module=/ngx_devel_kit-0.3.1
–add-module=/lua-nginx-module-0.10.15 --add-module=/ngx_devel_kit-0.3.1为lua相关模块。
lua脚本
判断是否对中文进行编码
local function testchinese(val)
local result = false
for i = 1, string.len(val) do
if string.byte(string.sub(val,i,i)) > 127 then
return true
else
result = false
end
end
return result
end
对url中的中文参数进行编码
local function transfergbktoutf(val)
local result = ""
local iconv = require("iconv")
local cd = iconv.new("utf-8" .. "//TRANSLIT", "gb2312")
local ostr, err = cd:iconv(val)
if #val > #ostr then
result = ngx.escape_uri(val)
elseif testchinese(val) == true then
result = ngx.escape_uri(val)
else
result = ngx.escape_uri(ostr)
end
return result
end
local argall = ngx.req.get_uri_args()获取url中参数
对参数进行转码
if argall==nil then
return argall
else
for k,v in pairs(argall) do
if argall[k]=="" or argall[k]==true then
decodeargs = decodeargs..k.."=".."&"
elseif argall[k]==true then
decodeargs = decodeargs..k.."&"
else
if type(argall[k]) == "table" then
for k1,val in pairs(argall[k]) do
value = transfergbktoutf(val)
decodeargs = decodeargs..k.."="..value.."&"
end
else
value = transfergbktoutf(v)
decodeargs = decodeargs..k.."="..value.."&"
end
end
end
decodeargs = string.sub(decodeargs, 1, -2)
end
nginx配置
在对应的location里面添加
set_by_lua_file $args /home/www/transchinesearg.lua