You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2部署Django REST Framework非根路径404问题求助

问题解决:Nginx下Django仅根路径可访问,其他路径返回404

核心原因

你的Nginx配置里,location /块的try_files $uri $uri/ =404逻辑存在问题:Nginx会优先尝试在本地服务器查找请求对应的文件或目录,找不到就直接返回404,根本没把请求转发给Gunicorn去处理Django的路由规则。而直接用Gunicorn启动时,所有请求都由Django接管,所以所有路径都能正常访问。

另外server_name配置里多了个斜杠,属于无效配置,建议一并修正。

解决方案

1. 修改Nginx配置文件

编辑/etc/nginx/sites-available/default,做以下调整:

  • 修正server_name:

    server_name 35.154.109.114;
    
  • 重构location /块,让静态文件找不到时转发给Gunicorn处理:

    location / {
        include proxy_params;
        # 先尝试本地静态文件,找不到就交给Django处理
        try_files $uri $uri/ @proxy_to_django;
    }
    
    # 定义转发到Gunicorn的规则
    location @proxy_to_django {
        proxy_pass http://unix:/var/www/html/api.drpashu/app.sock;
    }
    

2. 可选:优化Django的urls.py(非必须,仅做规范优化)

你的urls.py里有重复的静态资源配置,且混用了旧的url()和新的path()语法,可以优化为:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main.urls')),
    path('', include('poultryapp.urls')),
    path('', include('Vet.urls')),
    path('', include('call_module.urls')),
    path('', include('payment.urls')),
    path('', include('adminApp.urls')),
    path('', include('community.urls')),
    path('', include('sdk.urls')),
    path('', include('cooperative.urls')),
] 

# 仅在DEBUG模式生效的静态/媒体文件服务,生产环境建议由Nginx直接处理
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

3. 重启服务生效

修改完配置后,重启Nginx和Supervisor使配置生效:

sudo systemctl restart nginx
sudo supervisorctl restart all

调整后,Nginx会先处理静态文件请求,非静态请求都会转发给Gunicorn,由Django的路由系统处理,所有路径即可正常访问。

内容的提问来源于stack exchange,提问作者SG26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:25:31