Lua Scripting with Reverse Proxy

Reverse proxy supports dynamic evaluation of HTTP fallback requests using Lua scripting. Lua scripts can be used to allow, reject, or modify HTTP fallback transfer requests in real time as they are received by the Proxy server. Lua scripts have access to the HTTP request information such as body, headers, and URL. The Lua scripting facility is included in the Nginx™ software that is distributed with IBM Aspera Proxy.

Configuring Lua

The primary configuration file for Lua is /etc/nginx/nginx.conf. To enable the importing of external Lua libraries, either compiled or written in Lua, set lua_package_path and lua_package_cpath in the nginx.conf file. These settings should be inside the http directive and precede any server directives.


http {
    ...
    # set search paths for pure Lua external libraries (';;' is the default path):
    lua_package_path '/opt/aspera/nginx/lua/?.lua;;';
    # set search paths for Lua external libraries written in C (can also use ';;'):
    lua_package_cpath '/opt/aspera/nginx/lua/?.so;;'; 
    server {
        ...
    }
} 
   

This allows sources in /opt/aspera/nginx/lua to be imported using a require statement.

Running Your Scripts

To launch your Lua scripts, use a content_by_lua or access_by_lua block in a location directive. For example:

server {
    ...
    location /url/path/to/resource {
        content_by_lua 'ngx.say("Hello world")'
    }
For a list of Lua directives available in Nginx, see:
https://github.com/openresty/lua-nginx-module#readme

Errors

If errors are encountered during the evaluation of a Lua script, they are logged to the Nginx error log located here:
/opt/aspera/nginx/logs/error.log

Limitations

The Nginx component of IBM Aspera Proxy was not compiled with luaJIT. For this reason, the *_block directives cannot be used. For example, content_by_lua_block and access_by_lua_block are not available; use content_by_lua or access_by_lua instead.