У меня есть приложение Django, успешно работающее с Gunicorn/Uvicorn по подпути моего домена (example.com/myapp).
Виртуальный хост Nginx выглядит так:
сервер {
имя_сервера пример.com;
местоположение /myapp/ {
прокси_пасс http://myapp_gunicorn/;
proxy_set_header Хост $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $ схема;
}
местоположение /myapp/static/ {
псевдоним /home/www/myapp/static/;
}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
вверх по течению myapp_gunicorn {
сервер 127.0.0.1:8002;
}
сервер {
если ($host = example.com) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
имя_сервера пример.com;
слушать 80;
вернуть 404; # под управлением Certbot
}
Вот служба systemd с командой запуска Gunicorn:
[Ед. изм]
Description=демон myapp gunicorn
После=network.target
[Оказание услуг]
Пользователь=www-данные
Группа=www-данные
Рабочий каталог=/home/www/myapp
ExecStart=/home/venvs/myapp/bin/gunicorn myapp.asgi:application -b 0.0.0.0:8002 -w 8 -k uvicorn.workers.UvicornWorker --log-file /home/www/myapp.log
[Установить]
WantedBy=многопользовательская.цель
Читаю дальше ТАК о Django в подпапке с Nginx, я добавил следующие настройки в свой Django settings.py:
FORCE_SCRIPT_NAME = '/myapp'
USE_X_FORWARDED_HOST = Истина
# Чтобы Django доверял https от прокси-сервера Nginx
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
Я могу успешно получить доступ к моему приложению и его подпутям, например https://example.com/myapp/endpoint и страница администратора Django https://example.com/myapp/admin (успешно переписан как https://example.com/myapp/admin/login/?next=/admin/) Например.
Однако при нажатии кнопки проверки на странице администратора Django меня ошибочно перенаправляют на базовый путь (https://example.com/admin/логин/?next=/admin/).
Кроме того, я получаю 404 для всех статических файлов, они также обслуживаются по базовому пути. https://example.com/static/xxx вместо подпути https://example.com/myapp/static/xxx, хотя я думал, что это правильно настроено в vhost.
Я рассматривал аналогичные проблемы на SO (включая этот очень похожий), но мне это не помогло.
Есть идеи?