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