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

如何在NGINX中为两个Django应用从不同目录提供静态文件

Nginx配置多静态目录解决方法

你可以通过两种可靠的方式实现需求,让Nginx在/static/路径下优先查找pages应用的静态文件,找不到再匹配admin应用的:

方法一:直接指定文件路径(简洁高效)

server {
    server_name x.x.x.x;

    client_max_body_size 8M;

    access_log /webapps/logs/project/nginx-access.log;
    error_log /webapps/logs/project/nginx-error.log;

    # 匹配所有/static/开头的请求
    location ^~ /static/(.*) {
        # 优先查找pages应用的静态文件,失败则尝试admin应用,最后返回404
        try_files /webapps/project/pages/static/$1 /webapps/project/admin/static/$1 =404;
    }
}

这里用正则捕获/static/后的文件名部分$1,直接映射到两个静态目录的对应文件,逻辑清晰且减少内部跳转。

方法二:使用命名location(便于扩展配置)

如果需要给不同应用的静态文件设置不同缓存策略或其他规则,推荐这种方式:

server {
    server_name x.x.x.x;

    client_max_body_size 8M;

    access_log /webapps/logs/project/nginx-access.log;
    error_log /webapps/logs/project/nginx-error.log;

    location /static/ {
        # 尝试当前路径(无默认root则直接跳转),失败后依次匹配命名location
        try_files $uri @pages_static @admin_static;
    }

    # pages应用静态文件处理
    location @pages_static {
        alias /webapps/project/pages/static/;
        # 可选:添加静态文件缓存配置
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # admin应用静态文件处理
    location @admin_static {
        alias /webapps/project/admin/static/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

之前配置的问题说明

  1. 重复alias错误:Nginx的单个location块内只能存在一个alias或root指令,不能同时声明多个。
  2. try_files逻辑问题:你之前的try_files $uri @static @static2中,$uri会尝试在当前location的默认root下查找(未设置则用Nginx默认的html目录),这一步大概率会失败,虽然最终会跳转到命名location,但逻辑冗余且容易出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:37:48