У меня есть веб-сайт, который использует Django для API и Vue для внешнего интерфейса. В настоящее время при развертывании сайта я делаю следующее:
- Создание производственной сборки приложения Vue (
npm run build
) - Скопируйте папку Vue
dist
в определенную папкув приложении Django - Один из URL-адресов Django настроен как
TemplateView
, который обслуживает Vue index.html
Выполнив вышеизложенное, Nginx
в производстве простообслуживает приложение Django, используя gunicorn
, и все работает.
Однако я бы предпочел, чтобы Nginx обслуживал Vue index.html
и статические файлы. Например, /
будет служить приложению Django, а /spa
будет служить приложению Vue, которое само будет вызывать API.
Вот моя текущая конфигурация Nginx
:
upstream appserver_wsgi_app {
server localhost:8000 fail_timeout=0;
}
server {
listen 80;
server_name www.example.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
server_name www.example.com;
listen 443 ssl;
...
...
...
location /static {
autoindex on;
alias /home/user/static_django_files/;
}
location /media {
autoindex on;
alias /home/user/media_django_files/;
}
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://appserver_wsgi_app;
break;
}
}
}
Что нужно изменить в Nginx
, чтобы оно служило Vue index.html
и static files
, а также приложению Django
? Кроме того, нужно ли что-то изменить на стороне Vue, так как я сейчас просто вызываю API следующим образом:
axios.post("/api/dosomething/", data)
РЕДАКТИРОВАТЬ
Я добавил следующее к своемуКонфигурация nginx и загрузил папку Vue dist:
location /spa {
autoindex on;
alias /path/to/dist/;
try_files $uri $uri/ /index.html;
}
Я также добавил следующее к vue.config.js
:
baseUrl: '/spa'
И к своему Vue Router
: mode: history
При перезапуске nginx страница index.html
для приложения vue пытается загрузить в браузере, но не может найти файлы css
и js
, которые пытается найти в:
www.example.com/spa/js/...
www.example.com/spa/css/...