HTTP-Antwortdaten in nginx mit Lua ersetzen

English Deutsch

Dies ist ein Beispiel, wie body_filter_by_lua_block verwendet wird, um Teile der Antwort durch einen String zu ersetzen. Da es sich um ein Lua-Feature handelt, kann beliebiger Code beim Modifizieren des Bodys verwendet werden, einschließlich Netzwerkanfragen, Parsing usw. Hinweis: Dies ersetzt in der Antwort, die an den Client gesendet wird, nicht in der Anfrage, die an den Reverse-Proxy gesendet wird. Siehe String in Reverse-Proxy-HTTP-Anfrage mit Lua & nginx ersetzen für einen Lua-basierten Ansatz zum Ersetzen eines Strings in der Anfrage.

nginx_lua_body_filter.conf
header_filter_by_lua_block { ngx.header.content_length = nil }
body_filter_by_lua_block {
        local body = ngx.arg[1]
        if body then
                body = ngx.re.gsub(body, "string_to_replace", "string_by_which_to_replace")
        end
        ngx.arg[1] = body
}

Dies wird typischerweise in einem location {}-Block verwendet, um Strings nur für bestimmte URLs zu ersetzen:

nginx_lua_location.conf
location /config {
   proxy_pass http://127.0.0.1:12345/;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host meet.techoverflow.net;

    header_filter_by_lua_block { ngx.header.content_length = nil }
    body_filter_by_lua_block {
            local body = ngx.arg[1]
            if body then
                    body = ngx.re.gsub(body, "myvar", "myothervar")
            end
            ngx.arg[1] = body
    }
}

Check out similar posts by category: Nginx