如何将域名请求直接转发至Django子应用而非项目?
解决方案:将域名根路径指向Django子应用
核心问题不在于WSGI或Gunicorn的工作目录配置,而是路由映射和Nginx反向代理规则的调整,下面是具体步骤:
1. 修改项目根路由文件(bjsite/urls.py)
把原来挂载子应用bj的路由从带前缀的路径改为根路径:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 保留原有admin路由(如果需要) path('', include('bj.urls')), # 将根路径映射到bj子应用的路由 ]
注意:如果
bj/urls.py里的路由本身带有bj前缀,需要去掉,比如把path('bj/', views.home)改成path('', views.home),避免出现路径重复。
2. 调整Nginx站点配置
将Nginx的反向代理规则改为根路径转发,去掉原来的/bj后缀:
server { listen 80; server_name www.domain.de; # 静态文件转发(根据实际路径调整) location /static/ { root /path/to/your/django_project; expires 30d; } # 根路径请求转发到Gunicorn 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; } }
如果你之前的Nginx配置是单独针对
/bj路径的,需要删除或替换成上述根路径规则。
3. 确认Gunicorn配置正确性
你的WSGI_APPLICATION配置是正确的,无需修改。只需确保Gunicorn的工作目录指向项目根目录django_project,示例配置如下:
[Unit] Description=Gunicorn service for django_project After=network.target [Service] User=your_username Group=www-data WorkingDirectory=/path/to/your/django_project ExecStart=/path/to/your/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 bjsite.wsgi:application [Install] WantedBy=multi-user.target
4. 重启服务生效
修改配置后,重启Gunicorn和Nginx使变更生效:
sudo systemctl restart gunicorn sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者Mister Ieuns
相关产品推荐
相关产品推荐

