Маршрутизация поддоменов в приложении django
У меня есть проект django, который размещен на пользовательском домене (например, mydomain.com). У меня есть приложение "app". Например, в процессе разработки запросы выглядели как mydomain.com/app/dashboard. Однако я хотел использовать поддомен, чтобы все мое приложение размещалось на поддомене app.mydomain.com, а запросы к mydomain.com/app/dashboard направлялись бы к app.mydomain.com/dashboard. Для этого я использую Nginx, но столкнулся с несколькими проблемами. Основная часть конфигурации nginx:
server {
listen 443 ssl;
server_name mydomain.co www.mydomain.co;
location ~ ^/app(/?)(.*)$ {
return 301 https://app.mydomain.co/$2;
}
location ~ ^/help(/?)(.*)$ {
return 301 https://help.mydomain.co/$2;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $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 $scheme;
# WebSocket specific headers
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
server {
listen 443 ssl http2;
server_name app.mydomain.co;
location / {
# Proxy to your Django application server
proxy_pass http://127.0.0.1:8000; # Adjust the port to match your setup
proxy_set_header Host $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 $scheme;
}
}
# same for help
Когда мой шаблон url выглядит следующим образом:
path('app', include('app.urls')),
и я пытаюсь получить доступ к приборной панели, он перенаправляет на app.mydomain.com/dashboard, что не является правильным, поскольку /dashboard - это url исключительно для /app, а не для корневого каталога. Затем, когда я изменил его на:
path('', include('app.urls')),
это сработало, но тогда мои урлы для "app" были доступны для других поддоменов (например, пользователь мог получить доступ к help.mydomain.com/dashboard и по-прежнему видеть приборную панель и все мое приложение на этом поддомене). Любая помощь будет оценена по достоинству. Спасибо.