LUA User-Agent detector
Lua
Latest commit b611584 Jun 24, 2015 @robinef Merge pull request #2 from Aldor007/master
Normalized device type
Permalink
Failed to load latest commit information.
src missing file, typos Jun 12, 2015
test missing file, typos Jun 12, 2015
LICENSE Initial commit Jul 10, 2014
README.md Improve Oct 24, 2014
composer.json Update composer.json Jul 24, 2014

README.md

ua-lua

ua-lua is a small lib written in LUA providing device type detection.

ua-lua is detecting mobile or tablet devices based on user-agent inside nginx daemon.

Maybe not as accurate as WURFL but its small and fast processing.

No need to run complex backend scripts, you can save time and ressources (socket,cpu) by redirecting client to the appropriate end point (location, upstream, host).

REQUIREMENTS

You need nginx running with LUA module :

http://wiki.nginx.org/HttpLuaModule#Installation

INSTALL

Mac OSX install instructions:

cmd> brew install luarocks
cmd> luarocks install json2lua
cmd> brew install pcre
cmd> luarocks install lrexlib-pcre
cmd> git clone https://github.com/robinef/ua-lua.git

Linux install instructions:

cmd> apt-get install luarocks
cmd> luarocks install json2lua
cmd> apt-get install libpcrecpp0
cmd> luarocks install lrexlib-pcre
cmd> git clone https://github.com/robinef/ua-lua.git

TESTS AND EXAMPLES

cmd> cd test
cmd> lua is_tablet.lua
true

USAGE

ua-lua can help you redirecting your mobile user on a specific location or upstream in NGINX. See http://wiki.nginx.org/HttpLuaModule for more info about NGINX Lua module

First init the ua-lua class for performance by loading all regexp:

init_by_lua '
require "ua"
detect = ua.create("/path/to/Mobile_Detect.json")
';

Then in any /location you can:

content_by_lua '
    local h = ngx.req.get_headers()
    local userAgent = h["User-Agent"]
    local type = ""
    if detect:isMobile(userAgent) then
        type = detect:isTablet(userAgent) and "tablet" or "phone"
    else
        type = "other"
    end
    ngx.say(type)
';

Tuning

You can always create an in memory dictionary by storing already parsed user-agent :

http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT

BENCH

On a small linux server Ubuntu 14.04 with 2 CPU, 4Go RAM :

800 req/sec

CREDITS

Using json regexp config from http://mobiledetect.net/