Auch mit Lua lässt sich in unseren Docker-Containern eine Web-Seite ausliefern. Dort ist mod_lua installiert, so dass es ähnlich performant wie php funktioniert.
-- /var/www/html/docker-USER-web/demo.lua
function handle(r)
r.content_type = "text/plain"
if r.method == 'GET' then
r:puts("Hello Lua World!\n")
for k, v in pairs( r:parseargs() ) do
r:puts( string.format("%s: %s\n", k, v) )
end
elseif r.method == 'POST' then
r:puts("Hello Lua World!\n")
for k, v in pairs( r:parsebody() ) do
r:puts( string.format("%s: %s\n", k, v) )
end
else
-- use the ErrorDocument
return 501
end
return apache2.OK
end
Das Interessante an Lua ist aber eher, dass sich nicht nur Webseiten ausliefern lassen. Mit mod_lua lassen sich auch Handler in dem Apache registrieren, die zu bestimmten Zeiten der Verarbeitung im Server als Hooks aufgerufen werden.
Wenn man in der apache2.conf beispielsweise einen Hook hinterlegt:
LuaHookTranslateName /my/translatehandler.lua handle
lässt sich der folgende Hook bei jedem Request aktivieren:
--/my/translatehandler
require 'apache2'
require 'string'
function handle(r)
if string.match(r.uri,"^/docker-[^/]+-web/replace.txt$") then
r.filename = r.document_root .. "/replaced.txt"
return apache2.OK
end
return apache2.DECLINED
end
In den Docker-Containern ist eben jenes Skript exemplarisch als Translate-Handler eingebaut. Sie können es editieren, aber wenn es nicht mehr funktioniert, müssen Sie Ihren Docker-Container wieder aktivieren - die Dateien in /my werden also nicht gesichert.
curl https://informatik.hs-bremerhaven.de/docker-$USER-web/replace.txt
Lua lässt sich ebenfalls in haproxy nutzen: 5 ways to extend haproxy with lua
"With services, also known as applets, you can ask HAProxy to deliver a requests to your Lua script, which will then generate the response. No backend servers will be contacted. This is handy if you want to add some application logic to your proxy. Or, maybe you long for the old days of Apache + mod_php scripts. Who knows!"
Nun ja - wer auch immer damit gemeint ist ...
Eine Einführung in LuaLaTeX gibt es unter Introduction to LuaTeX.
Lua lässt sich in php als Sandbox einbinden:
$sandbox = new LuaSandbox;
$sandbox->setMemoryLimit( 5 * 1024 * 1024 );
$sandbox->setCPULimit( 10 );
function myfunction( $v ) {
return [ $v *10+3 ];
}
$sandbox->registerLibrary( 'php', [
'myfunction' => 'myfunction',
'output' => function ( $string ) {
echo "$string\n";
},
'error' => function () {
throw new LuaSandboxRuntimeError( "Something is wrong" );
}
] );
// Execute some Lua code, including callbacks into PHP and into Lua
///php.output( "Hello, world" );
$luaCode = <<<EOF
return "Hello", function ( v )
return php.myfunction( v *10 +2 )
end
EOF;
list( $histring, $myfunc ) = $sandbox->loadString( $luaCode )->call();
$result=$myfunc->call(1);
echo "$histring ".$result[0]."\n";
list( $ok, $message ) = $sandbox->loadString( 'return pcall( php.error )' )->call();
Sonstiges, wofür lua gut sein kann: nmap, minetest, pandoc, redis, prosody, torch, varnish, vim
Interessant zu lesen: a look at the design of lua
Interessant zu schauen: Lua Tutorial