Django + nginx (с docker): ошибочные перенаправления /admin
Так,
У меня есть проект, в котором есть Docker-развертывание веб-сайта с Nginx, Django, обслуживаемый с помощью Gunicorn + статические файлы, и фронтенд Vue.js (компилируется в статические файлы).
Проблема:
Когда я пытаюсь получить доступ к интерфейсу администратора Django по адресу http://localhost:8100/admin
, меня перенаправляют на https://localhost/admin/
, что, очевидно, не удается.
Что я действительно хочу:
Во-первых, чтобы это работало. Но я не хочу жестко кодировать имя сайта (потому что это проект с открытым исходным кодом), я не хочу принудительно использовать SSL, потому что у меня есть сервер, на котором я собираюсь развернуть это за другим обратным прокси, так что сайт будет некоторым поддоменом на моем сервере, под моими сертификатами. Поэтому я хочу, чтобы и Nginx, и слой Django были настолько "тупыми", насколько это возможно.
Для помощи в отладке:
docker-compose.yaml
:
version: "3"
services:
reverse-proxy:
image: nginx:stable
ports:
- 8100:80
volumes:
- frontend_data:/frontend/
- backend_data:/backend/
- ./nginx:/etc/nginx/conf.d
depends_on:
- backend
frontend:
# ....
backend:
build:
context: ./backend
dockerfile: Dockerfile
entrypoint: ./entrypoint.sh
stop_signal: SIGINT
depends_on:
- db
volumes:
- backend_data:/backend/
db:
image: postgres:13-bullseye
volumes:
- postgres_data:/var/lib/postgresql/data/
volumes:
# ...
Конфигурация Nginx:
upstream backend_server {
server backend:8000;
}
server {
listen 80;
location /api {
proxy_pass http://backend_server/api;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_redirect off;
}
location /openapi {
proxy_pass http://backend_server/openapi;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_redirect off;
}
location /admin {
proxy_pass http://backend_server/admin;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_redirect off;
}
location /static {
alias /backend/static_root/;
}
location /media {
alias /backend/media_root/;
}
location / {
try_files $uri $uri/ /index.html;
root /frontend/dist;
}
}
Полный проект в этом месте (github) .