文档章节

使用lua实现nginx rewrite

-外星人-
 -外星人-
发布于 2016/12/09 00:44
字数 351
阅读 162
收藏 2

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

下面开始代码

nginx 配置

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

mobile.lua代码

-- 手机访问重定向到移动版

local agent = ngx.var.http_user_agent

if 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
    end
end

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

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

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

© 著作权归作者所有

共有 人打赏支持
-外星人-
粉丝 49
博文 47
码字总数 22352
作品 0
深圳
程序员
Nginx+Lua开发入门

第二章 Nginx+Lua开发入门 博客分类: 跟我学Nginx+Lua开发 nginxluangxluaopenresty Nginx入门 本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章: nginx启动、关闭、重启 ...

fdhay
2016/08/31
38
0
【精选】Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)

源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令。 指令用于指定何时运行用户Lua代码以及如何使用结果。 下面是显示指令执行顺序的图。 当一个...

tinywan1227
2017/03/09
0
0
【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解

源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一、介绍   各种 bylua, byluablock和* byluafile配置指令用作nginx.conf文件中Lua API的网关。 下面描述的Nginx Lua API只能在这...

tinywan1227
2017/03/12
0
0
玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应用也越来越广泛,常见的应用有:网页服务器、反向代理...

大数据之路
2015/08/19
0
0
Openresty 执行阶段与api之间的关系(一)

Openresty与nginx的 执行阶段 常见的七个阶段的顺序: 每个阶段的作用: 知道这几个阶段之后,如何利用Nginx的函数变量去构建自己想要的系统,了解nginx变量和函数的作用域也是十分关键。 ng...

年少爱追梦
2016/10/24
180
0

没有更多内容

加载失败,请刷新页面

加载更多

WePY 开发指南注意事项

**** 1 代码规范 **** 1 变量与方法尽量使用驼峰式命名,并且注意避免使用$ 开头的标识为Wepy框架的内建属性和方法,可在JavaScript 脚步可以this的方式直接使用。2 小程序入口,页面,...

舒龙虎
25分钟前
0
0
70:shell脚本中的逻辑判断(文件目录属性判断、if判断、case用法)

1、shell脚本中的逻辑判断语法: 格式1:if 条件 ; then 语句 ; fi 格式2:if 条件 ; then 语句; else 语句;fi 格式3:if 条件; then 语句;elif 条件;then 语句;else 语句;fi 逻辑...

芬野de博客
26分钟前
1
0
Java调用脚本并输出脚本返回数据

public class ExecuteSHFile {private static Logger logger = LoggerFactory.getLogger(ExecuteSHFile.class);public static String executeSHFile(String shutdown_path) throws ......

Aeroever
28分钟前
0
0
MySQL常见错误

###Ignoring query to other database 登录数据库时 没有在用户名前加-u

我是菜鸟我骄傲
28分钟前
1
0
mysql之explain分析

我是参考这篇文章的 https://my.oschina.net/ruoli/blog/1807394

求是科技
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部