使用lua实现nginx rewrite

使用lua实现nginx rewrite

上一次上线只是简单的把手机端的流量切换手机端的首页,有点粗糙,现在需要把电脑端相应的页面切换到电脑端的页面,直接用nginx自带的rewrite不太好做,所以用lua做

下面开始代码

nginx 配置

location / {    rewrite_by_lua_file lua/mobile.lua;    ... # 反向代理}

mobile.lua代码

-- 手机访问重定向到移动版local agent = ngx.var.http_user_agentif agent ~= nil then    local m, ret = ngx.re.match(agent, "Android|webOS|iPhone|iPod|BlackBerry")    if m ~= nil then        local queryString = ngx.var.args        if queryString == nil then queryString = "" end        local rewrite_urls = {}        rewrite_urls["/"] = "/app/index.html"        rewrite_urls["/coin/index.html"] = "/app/coin.html"        rewrite_urls["/equity/index.html"] = "/app/coin.html"        rewrite_urls["/guide/index.html"] = "/app/guide.html?" .. queryString        rewrite_urls["/market/trade.html"] = "/app/trade.html?" .. queryString        rewrite_urls["/account/fund.html"] = "/app/account.html?" .. queryString        rewrite_urls["/guide/article.html"] = "/app/guide-details.html?" .. queryString        local redirect_uri = rewrite_urls[ngx.var.uri]        if redirect_uri then            ngx.redirect(redirect_uri, ngx.HTTP_MOVED_TEMPORARILY)        end    endend

其实逻辑也很简单,主要在nginx rewrite 阶段完成页面跳转,判断是否手机端,然后通过一个table把对应的url映射好,直接以当前uri作为key取table的值,如果取到说明有映射关系,直接把值当成新的url重定向过去

queryString是get参数,有的需要有的不需要,不带参数的话,有点页面会有问题,比如文章详情,是需要文章ID的

通过lua可以写很复杂的服务处理逻辑,应用程序只需要做好自己的事情就好了

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部