Настроить Nginx с Vue.js, Django Rest Framework в качестве бэкенда и /api/ на одном сервере?

Я нахожусь в процессе развертывания моей недавно разработанной электронной коммерции на сервере Ubuntu, который у меня есть. Я уже установил Nginx для Frontend и Backend. Все приложение работает нормально. Единственной проблемой является DRF API, который не получает ничего от бэкенда (он не отправляет электронные письма, пользователи не могут зарегистрироваться). На все это выдается ошибка 500. Мне кажется, что мне все еще нужно добавить /api/ в конфигурацию Nginx, но когда я это делаю, все приложение падает. Не мог бы кто-нибудь объяснить, как лучше всего настроить это в "sites-available"? Спасибо!

Вот мои сайты, доступные для бэкенда:

upstream perulab_app_server {
    server unix:/webapps/perulab/venv/run/gunicorn.sock fail_timeout=0;
}

server {
    listen 8000;
    server_name 172.16.7.52;

    client_max_body_size 4G;

    location /static/ {
        root /webapps/perulab/web-backend;
    }

    location /media/ {
        root /webapps/perulab/web-backend;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://perulab_app_server;
        }
    }
}

А это мои сайты, доступные для Backend:

server {
    listen 8010;
    listen [::]:8010;
    server_name _;
    charset utf-8;
    root /webapps/perulab/web-frontend/dist;
    index index.html index.htm;

    location / {
        try_files $uri /index.html;
    }
}

Когда я использую его так, как он есть сейчас, консоль печатает эту ошибку:

GET http://172.16.7.52:8000/api/v1/get-user-details/ 500 (Internal Server Error)

NameError at /api/v1/get-user-details/

name 'token' is not defined

Здесь говорится, например, при входе в систему, что токен не определен, в то время как на локальной машине все работает нормально. Кроме того, Token не имеет никакого отношения к Send User Details, у него даже нет ничего связанного с этим в модели.

Я смог найти решение. По сути, мне нужно было добавить конфигурацию местоположения в файл Backend "Sites-Available":

upstream perulab_app_server {
    server unix:/webapps/perulab/venv/run/gunicorn.sock fail_timeout=0;
}

server {
    listen 8000;
    server_name 172.16.7.52;

    client_max_body_size 4G;

    location /static/ {
        root /webapps/perulab/web-backend;
    }

    location /media/ {
        root /webapps/perulab/web-backend;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://perulab_app_server;
        }
    }

/ THIS IS THE SOLUTION:
    location /api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://perulab_app_server/api/;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    
    
}

Вернуться на верх