Nginx: редирект на другую платформу/площадку при 404

30 Sep 2015

nginx_with_two_upstreamКазалось бы: что может быть проще, чем взять два бекенда и одну точку входа.
Когда первый бекенд не отвечает (или отвечает, но 404), то перенаправлять запрос (как можно прозначнее для пользователя) на второй бекенд.
Правильно! :) Проще быть ничего не может.

location / {  
 # Отправляем все 404 на @backendB  
 error\_page 404 = @backendB;  
 proxy\_intercept\_errors on;  
 log\_not\_found off;  
 # Try the proxy like normal  
 proxy\_set\_header X-Forwarded-For $remote\_addr;  
 proxy\_set\_header Host $host;  
 proxy\_set\_header X-Real-IP $remote\_addr;  
 proxy\_pass http://127.0.0.1:8081;  
}

location @backendB {  
 # Резервный бекенд  
 proxy\_set\_header X-Forwarded-For $remote\_addr;  
 proxy\_set\_header Host $host;  
 proxy\_set\_header X-Real-IP $remote\_addr;  
 proxy\_pass http://127.0.0.1:8082;

# Настоящую 404ую мы уже получим от этого бекенда.

}