Dynamische Variablen aus externer Quelle in der Nginx-Proxy-Konfiguration

Dynamische Variablen aus externer Quelle in der Nginx-Proxy-Konfiguration

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_typeder 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

verwandte Informationen