Доброго времени суток.
Есть 2 проекта на django. Оба проекта - api для мобильного приложения. Первый проект - первая версия api, второй вторая. Вторая версия находится на стадии разработки.
Для тестирования некоторого функционала заготовлены заглушки, в виде json-файлов.
Нужно реализовать такую схему запросов:
При обращении по url второй версии api нужно проверить готов ли данный функционал. Если оно отвечает 404, то проверить есть ли что-то в заглушках, если и там нет, то попробовать запросить у первой версии api. Если первая версия тоже вернет 404 то только тогда вернуть ошибку клиенту.
Я примерно представляю себе это так:
upstream api_v1 {
server unix:///tmp/api_v1_gunicorn.sock fail_timeout=0;
}
upstream api_v2 {
server unix:///tmp/api_v2_gunicorn.sock fail_timeout=0;
}
server {
listen 80;
#### API V2
location /api/v2/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://api_v2;
error_page 404 = @mock_api_v2;
}
#### MOCK API V2
location @mock_api_v2 {
index index.json;
root /path/to/dir/with/mock/files/;
error_page 404 = @backend;
}
#### REWRITE TO V1
location @backend {
rewrite /api/v2/(.+) /api/v1/$1 break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api_v2;
proxy_redirect off;
}
#### API V1
location / {
include proxy_params;
proxy_pass http://api_v2;
}
}
Но почему-то ничего из этого ничего не выходит.
Когда я делаю такой запрос:
GET /api/v2/old_method/
То вместо того что бы отдать мне то что лежит по адресу
/api/v1/old_method/
сразу возвращается 404.
Если кто-то знает как почему так происходит, или что я делаю не так, или как это сделать по другому - посоветуйте.