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

如何通过Nginx从根路径同时托管Django与静态HTML等资源?

Nginx配置:托管静态HTML资源并转发未匹配请求至Django

要实现需求,你需要在现有的server配置块中添加以下核心规则,利用Nginx的try_files指令实现"优先匹配静态文件,未匹配则转发Django"的逻辑:

# 优先处理静态资源请求,未匹配则转发至Django
location / {
    try_files $uri $uri/ @django;
}

# 命名location:转发请求至Django的逻辑(复用你现有配置)
location @django {
    # 替换为你当前使用的Django转发配置,比如uwsgi或proxy方式
    # 示例(uwsgi部署):
    uwsgi_pass unix:/var/run/uwsgi/myproject.sock;
    include uwsgi_params;
    
    # 示例(proxy部署,比如Gunicorn):
    # proxy_pass http://127.0.0.1:8000;
    # proxy_set_header Host $host;
    # proxy_set_header X-Real-IP $remote_addr;
}

# 优化静态资源响应(可选但推荐)
location ~* \.(html|jpg|jpeg|png|gif|css|js|ico|svg)$ {
    root /webapps/myproject/code/myproject/static_html/;
    # 设置缓存过期时间,减轻服务器压力
    expires 30d;
    add_header Cache-Control "public, max-age=2592000";
}

关键说明:

  1. try_files的作用:

    • 当请求/test.html时,Nginx会先在root指定的目录下查找test.html文件;
    • 如果请求是/directory/,会尝试查找该目录下的索引文件(比如index.html,需确保你的静态目录有对应索引文件,或调整$uri/后的逻辑);
    • 若上述文件/目录都不存在,会自动跳转到@django命名location,将请求转发给Django处理。
  2. 路径匹配逻辑:
    你的静态资源目录/webapps/myproject/code/myproject/static_html/是root路径,所以请求/directory/foo.html会对应查找/webapps/myproject/code/myproject/static_html/directory/foo.html,完全符合你的路径需求。

  3. 静态资源优化块:
    专门匹配常见静态文件后缀,单独设置缓存规则,能大幅提升静态资源的访问效率,避免这些请求进入Django处理流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:05:40