`
qq362228416
  • 浏览: 33338 次
社区版块
存档分类
最新评论

使用lua实现nginx rewrite

 
阅读更多

上一次上线只是简单的把手机端的流量切换手机端的首页,有点粗糙,现在需要把电脑端相应的页面切换到电脑端的页面,直接用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可以写很复杂的服务端处理逻辑,应用程序只需要做好自己的事情就好了

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    lua-nginx-module-master.zip

    2. **配置使用**:在Nginx的配置文件(如`nginx.conf`)中,你可以通过`lua_code_cache`指令控制Lua脚本的缓存策略,`init_by_lua_file`或`init_by_lua`用于执行启动时的Lua代码,`set_by_lua_block`、`rewrite_by_...

    NGINX + LUA实现复杂的控制

    在本文中,我们将介绍如何使用 NGINX + LUA 实现复杂的控制,包括安装 LUA 模块、使用 LUA 脚本实现访问限制、rewrite 跳转等功能。 一、安装 LUA 模块 要使用 LUA 在 NGINX 中实现复杂的控制,需要安装 LUA 模块...

    lua-nginx-module完全指南.docx

    《Lua-Nginx-Module完全指南》是一份深入解析如何使用Lua在Nginx中编写脚本的文档。本文档涵盖了指令、API接口以及相关的使用方法,为开发者提供了全面的指导。Nginx-Lua模块使得在Nginx配置文件中嵌入Lua脚本成为...

    Lua和Nginx结合使用的超级指南

    尽管后者看起来并不那么直观,但使用Lua可以在Nginx中实现路径重写,从而达到目的。 ```lua -- Lua 脚本示例:路径重写 function rewrite_path(new_path) ngx.req.set_uri(new_path) end ``` 使用Lua进行路径重写...

    lua+nginx动态更新配置.zip

    配置为全局生效,即需对所有工作进程共享。更新频率比较慢,使用lua_shared_dict进行存储。如下定义: ...通过在工作线程中使用rewrite_by_lua_block指令,获取任意时刻的配置情况测试代码的可用性。

    Lua在Nginx中的应用

    这些处理可以在Nginx的多个阶段进行,比如init_by_lua(在worker进程初始化时)、set_by_lua(在响应头处理前)、rewrite_by_lua(在重写阶段)、access_by_lua(在访问控制阶段)和content_by_lua(在内容生成阶段...

    Nginx+Lua阿⾥实战经验谈.pdf

    为了在Tengine/Nginx的rewrite规则中插入复杂逻辑,可以使用rewrite_by_lua和set_by_lua方法。前者适合编写完整的rewrite逻辑,但不适用于与现有rewrite功能混合使用,后者则可用于设置变量,然后在location块中进行...

    1 Nginx添加Lua扩展模块.docx

    Nginx 是一个流行的开源 Web 服务器软件, Lua 是一个轻量级的脚本语言,通过添加 Lua 扩展模块,可以实现动态配置和高性能的 Web 服务器。下面是 Nginx 添加 Lua 扩展模块的详细步骤和知识点。 一、编译安装 Nginx...

    Nginx中使用Lua脚本配置示例

    在Nginx服务器环境中,使用Lua脚本可以极大地扩展Nginx的功能,实现更复杂的逻辑处理。Lua是一种轻量级、高性能的脚本语言,它的集成使得Nginx能够处理动态内容,进行数据处理和控制流决策,而不仅仅是作为一个静态...

    Nginx-ngx_lua模块原理和内置函数.docx

    - **rewrite_by_lua / rewrite_by_lua_file / access_by_lua / access_by_lua_file / header_filter_by_lua / header_filter_by_lua_file / body_filter_by_lua / body_filter_by_lua_file:** - 这些指令用于处理...

    nginx配置lua所需组件

    此外,`lua_shared_dict`可以用来在Nginx实例间共享数据,`lua休息`用于设置定时任务,`log_by_lua`允许在日志记录中使用Lua,而`rewrite_by_lua`则可以在重写规则中执行Lua代码。 为了调试和优化Lua脚本,还可以...

    nginx lua.ppt

    ngx_lua 是 Nginx 的一个扩展模块,它允许在 Nginx 配置文件中使用 Lua 脚本进行更复杂的逻辑处理。这个技术结合了 Nginx 的高性能和 Lua 的轻量级、高效的特性,使得动态处理和静态内容分发得以更好地融合。 在 ...

    Nginx知识体系入门实践.zip

    07.Nginx Rewrite跳转规则与实践 08.Nginx构建Https加密传输网站(基于IOS苹果要求) 09.Nginx构建动态网站架构lnmp&lnmt 10Nginx+Lua-实战代码灰度发布实战-WAF防火墙 11.Nginx性能优化与压测工具 12.Nginx常见问题 ...

    跟我学Nginx+Lua开发

    Lua脚本可以直接嵌入到Nginx配置文件中,通过`content_by_lua_file`或`rewrite_by_lua_file`指令来调用Lua代码。 ##### 1. Lua脚本示例 下面是一个简单的Lua脚本示例,展示了如何使用Lua来处理HTTP请求: ```lua ...

    通过lua来配置实现Nginx服务器的防盗链功能

    通过Lua配置实现Nginx服务器的防盗链功能是一种有效的保护网站资源不被恶意盗用的方法。在本文中,我们将深入探讨如何利用Lua脚本在Nginx中设置防盗链策略,以及具体的配置步骤。 首先,防盗链的主要目的是防止外部...

    Nginx脚本

    但是,Nginx可以通过使用Lua脚本或者第三方模块如Nginx Plus的API来实现一定的动态处理能力。其中,最常用的扩展是Nginx的Lua模块(ngx_lua)。 ### 2. Lua在Nginx中的应用 Lua是一种轻量级的、高效的脚本语言,被...

    nginx-lua-rewrite-request:以下示例是通过添加一些其他数据来重写传入请求,然后将新请求发送到目标

    反向代理cd nginx-lua-request-capturedocker-compose -f docker-compose.yml up -d记录器cd loggerdocker-compose -f docker-compose-loger.yml up -d发送请求curl -i ... "source":"Gershon", "message":"Received ...

Global site tag (gtag.js) - Google Analytics