Как настроить nginx с бэкендом и интерфейсом?

У меня есть простое приложение vue.js и django (как REST API), которое я хочу объединить с nginx. На данный момент фронтенд работает, а бэкэнд нет. Вот мой конфиг nginx:

server {
    listen 80;
    location / {
        root   /usr/share/nginx/html/;
        index  index.html index.htm;
    }
    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://localhost:8000/;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
    }
}

Посещение localhost работает для статических файлов, но localhost/api приводит к ошибке плохого шлюза: [error] 29#29: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: , request: "GET /api HTTP/1.1", upstream: "http://127.0.0.1:8000/", host: "localhost"

Кроме того, попытка посетить localhost/api через интерфейс (axios) просто возвращает сайт «Вам нужен javascript для отображения этой страницы», который является лишь частью интерфейса.

Запуск серверной части отдельно, вне докера и nginx, отлично работает на локальном хосте: 8000.

Что я могу сделать, чтобы заставить его работать? Это не обязательно должно быть сделано таким образом, если интерфейс и серверная часть могут обмениваться данными.


person Pomegranate    schedule 16.02.2021    source источник


Ответы (1)


Вы сказали, что используете Докер? Затем вам нужно изменить localhost на имя контейнера, в котором работает ваш сервер.

person Argus Duong    schedule 17.02.2021