Date Étiquettes nginx / redis

On a essayé de rediriger 2 millions d'url avec la fonction remaps de nginx.
Les redirections occupaient beaucoup de temps CPU et chargaient la mémoire du serveur (1Go).
Les temps de réponses étaient très moyens. Une autre solution est possible sans ces inconvénients.


On récupère la lib lua sur OpenResty.

On le range et on édite nginx.conf pour placer le chemin ci-dessous dans la balise http :

lua_package_path "/etc/nginx/lib/redis.lua;;";

On édite la conf du vhost :

location / {
    access_by_lua_block {

            local redis = require "resty.redis"
            local red = redis:new()

            red:set_timeout(1000) -- 1 sec
            local ok, err = red:connect("127.0.0.1", 6379)

            if not ok then
                    ngx.exit(503)
                    return
            end

            local key = ngx.var.uri
            local res, err = red:get(key)

            if res ~= ngx.null then
                    ngx.redirect(res, 301)
                    return
            end
            }

    try_files $uri $uri/ /index.php?$args;
}

Reste à alimenter redis.

Le contenu du fichier à importer est avec la forme suivante :

SET /toto http://exemple.com/titi
....
SET /tata http://exemple.com/tutu

La commande magique :

cat import.redir | redis-cli --pipe