Ich muss einige bedingte Aktionen in Nginx ausführen, das als Proxy fungiert. Im Grunde läuft alles darauf hinaus, einige Nginx-Variablen aus einer externen Quelle festlegen zu können. Dies kann ein Bash-Skript oder ein per URL oder etwas Ähnliches generiertes Ergebnis sein.
Zum Beispiel:
set $var = [result of http request]
oder
set $var = [result of bash command]
Gibt es dafür zuverlässige Lösungen? Module? Wenn das mit nginx keine gute Idee ist, welche Alternativen gibt es?
Antwort1
Die Lösung bestand darin,Lua-Moduldas ein einfaches Lua-Skript ausführt, um die erforderlichen Verarbeitungsvorgänge durchzuführen. Einfaches Beispiel:
location / {
# Get device type from lua script.
# Note: do not use content_by_lua as it's executed in separate context.
set_by_lua_file $device_type 'device-detect.lua';
# Do what needs to be done...
}
Was auch immer vom Lua-Skript zurückgegeben wird, landet in $device_type
der Variable.
Wichtig zu beachten ist, dass das Lua-Modul bei den meisten Linux-Distributionen Teil des Nginx-Extras-Pakets ist, das anstelle des Standard-Nginx-Core installiert werden muss.
Antwort2
Nginx hat viele eingebaute Variablen[1]. Sie könnten so etwas verwenden:
#Default to EN
set $vislang "EN";
#Discriminate language
if ($http_accept_language ~* "^fr") {
set $vislang "FR";
}
Eine Bash-basierte Lösung könnte ein „sed -i nginx_conf_file && service nginx reload“ sein, aber ich denke, das ist nicht sehr sauber.
[1]http://nginx.org/en/docs/http/ngx_http_core_module.html#variables