Назад | Перейти на главную страницу

Настройка Nginx для обслуживания приложения UWSGI из местоположения под серверным блоком nodejs

У меня работает 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;
}