summaryrefslogtreecommitdiffstats
path: root/modules/lua/docs/basic-configuration.txt
blob: b83769849f6244269b7cbe57698086b6b3ed10c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
See sample_httpd.conf for examples

The basic module loading directive is
    LoadModule lua_module modules/mod_lua.so

The handler name is "lua-script" so you can use the normal
AddHandler directive, such as "AddHandler lua-script .lua" to
set anything ending in .lua to use mod_lua to evaluate

mod_lua exports several additional directives:

    LuaRoot /path/to/a/directory
        Specify the base path which will be used to evaluate all
        relative paths within mod_lua. If not specified they
        will be resolved relative to the current working directory,
        which may not always work well for a server.

    LuaScope once|request|conn|server [max|min max]
        Specify the lifecycle scope of the Lua interpreter which will
        be used by handlers in this "Directory." The default is "once"
        
        once: use the interpreter once and throw it away.
        
        request: use the interpreter to handle anything based on 
                 the same file within this request, which is also 
                 request scoped.
                 
        conn: Same as request but attached to the connection_rec
        
        server: This one is different than others because the
                server scope is quite long lived, and multiple threads
                will have the same server_rec. To accommodate this
                server scoped interpreter are stored in an apr
                resource list. The min and max arguments are intended
                to specify the pool size, but are unused at this time.

    LuaMapHandler uri-pattern /path/to/lua/script.lua [function-name]
        This directive matches a uri pattern to invoke a specific
        handler function in a specific file. It uses PCRE regular
        expressions to match the uri, and supports interpolating
        match groups into both the file path and the function name
        be careful writing your regular expressions to avoid security
        issues.
        
        Examples:
            LuaMapHandler /(\w+)/(/w+) /scripts/$1.lua handle_$2
                This would match uri's such as /photos/show?id=9
                to the file /scripts/photos.lua and invoke the
                handler function handle_show on the lua vm after
                loading that file.
                
            LuaMapHandler /bingo /scripts/wombat.lua
                This would invoke the "handle" function, which
                is the default if no specific function name is
                provided.
    
    LuaPackagePath /path/to/include/?.lua
        Add a path to lua's module search path. Follows the same
        conventions as lua. This just munges the package.path in the 
        lua vms.
        
        Examples:
            LuaPackagePath /scripts/lib/?.lua
            LuaPackagePath /scripts/lib/?/init.lua

    LuaPackageCPath /path/to/include/?.soa
        Add a path to lua's shared library search path. Follows the same
        conventions as lua. This just munges the package.cpath in the 
        lua vms.
        
        Examples:
            LuaPackagePath /scripts/lib/?.so

    LuaCodeCache stat|forever|never
        Specify the behavior of the in-memory code cache. The default
        is stat, which stats the top level script (not any included
        ones) each time that file is needed, and reloads it if the
        modified time indicates it is newer than the one it has
        already loaded. The other values cause it to keep the file
        cached forever (don't stat and replace) or to never cache the 
        file.
        
        In general stat or forever is good production and stat or never
        for development.
        
        Examples:
            LuaCodeCache stat
            LuaCodeCache forever
            LuaCodeCache never
    
    LuaHookTranslateName  /path/to/lua/script.lua  hook_function_name
        Add a hook (at APR_HOOK_MIDDLE) to the translate name phase of
        request processing. The hook function receives a single
        argument, the request_rec, and should return a status code, 
        which is either an HTTP error code, or the constants defined
        in the apache2 module: apache2.OK, apache2.DECLINED, or
        apache2.DONE. 

        For those new to hooks, basically each hook will be invoked
        until one of them returns apache2.OK. If your hook doesn't
        want to do the translation it should just return
        apache2.DECLINED. If the request should stop processing, then
        return apache2.DONE.

        Example:
            LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper

            -- /scripts/conf/hooks.lua --
            function silly_mapper(r)
                if r.uri == "/" then
                    r.file = "/var/www/home.lua"
                    return apache2.OK
                else
                    return apache2.DECLINED
                end
            end

    LuaHookFixups  /path/to/lua/script.lua  hook_function_name
        Just like LuaHookTranslateName, but executed at the fixups phase

    LuaHookMapToStorage  /path/to/lua/script.lua  hook_function_name
        ...

    LuaHookCheckUserID  /path/to/lua/script.lua  hook_function_name
        ...

    LuaHookTypeChecker  /path/to/lua/script.lua  hook_function_name
        ...

    LuaHookAuthChecker  /path/to/lua/script.lua  hook_function_name
        ...

    LuaHookAccessChecker  /path/to/lua/script.lua  hook_function_name
        ...

    LuaHookAuthChecker  /path/to/lua/script.lua  hook_function_name
        ...

    LuaHookInsertFilter  /path/to/lua/script.lua  hook_function_name
        Not Yet Implemented