У меня работает API-интерфейс UWSGI Django, настроенный в NGINX следующим образом:
upstream django_api {
server 127.0.0.1:8088;
}
server {
server_name api.domain.com;
root /home/www/api/domain/;
access_log /var/log/nginx/api.domain.com-access.log;
error_log /var/log/nginx/api.domain.com-error.log;
location / {
uwsgi_pass django_api;
include uwsgi_params;
uwsgi_read_timeout 600;
add_header Host $hostname;
}
}
И приложение узла настроено следующим образом:
server {
server_name app.domain.com;
root /home/www/app/dist/;
access_log /var/log/nginx/app.domain.com-access.log;
error_log /var/log/nginx/app.domain.com-error.log;
location / {
try_files $uri $uri/ /index.html;
proxy_cache domain_zone;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
Я хочу обслуживать Django api из подпути моего приложения (например, app.domain.com/api/), а также api.domain.com.
Обычно я думаю, что мне нужен новый блок местоположения в app.domain.com, например:
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://localhost:8088;
}
Но это не работает, и я получаю ошибку 500. Я пробовал много других конфигов, но безуспешно. Это можно сделать?
Прохождение uwsgi_pass
видимо свое дело, спасибо Алекси за совет.
Теперь новый конфиг выглядит так:
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://localhost:8088;
uwsgi_pass django_api;
include uwsgi_params;
uwsgi_read_timeout 600;
add_header Host $hostname;
}