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

如何在nginx.conf中引用外部文件?批量配置扩展名匹配规则

解决Nginx从外部文件读取大量扩展名匹配的问题

当然可以搞定!当需要维护上百种文件扩展名的匹配规则时,把所有内容堆在nginx.conf里确实会让配置变得臃肿难维护,Nginx提供的include指令正好能解决这个问题,下面给你两种实用的实现方式:

方式一:直接引入完整的location配置片段

这种方式最直观,把针对扩展名的整个location配置单独放在外部文件里,然后在主配置中引入:

  • 创建外部配置文件
    比如在Nginx的配置目录下(通常是/etc/nginx/)创建一个file_ext_location.conf文件,内容如下:

    location ~ \.(txt|data|jpg|mp3|midi|png|xml|csv|...) {
        root /data/images;
        # 这里还可以添加其他配置,比如expires、add_header等
    }
    

    把你需要的所有扩展名用|分隔放在括号里,后续要添加或删除扩展名时,直接修改这个文件就行。

  • 在nginx.conf中引入该文件
    打开你的主配置文件nginx.conf,在对应的server块内添加include指令:

    server {
        listen 80;
        server_name your-domain.com;
    
        # 引入外部的扩展名location配置
        include /etc/nginx/file_ext_location.conf;
    
        # 其他server相关配置...
    }
    

方式二:用map指令统一管理扩展名规则

如果需要在多个location或server中复用这套扩展名规则,用map会更灵活:

  • 创建扩展名列表文件
    创建一个file_extensions.list文件,内容是用|分隔的所有目标扩展名:

    txt|data|jpg|mp3|midi|png|xml|csv
    
  • 在http块中定义map映射
    打开nginx.conf,在http块内添加如下配置,通过include引入扩展名列表:

    http {
        # 其他http级配置...
    
        map $uri $is_target_ext {
            default 0;
            # 引入外部扩展名列表,匹配到则赋值为1
            ~*\.(`include /etc/nginx/file_extensions.list;`) 1;
        }
    
        server {
            # server配置...
    
            location / {
                # 判断是否为目标扩展名的请求
                if ($is_target_ext = 1) {
                    root /data/images;
                }
                # 其他请求的处理逻辑...
            }
        }
    }
    

    这种方式的好处是,一套扩展名规则可以在多个server或location中复用,不用重复写正则。

注意:Nginx的include指令支持绝对路径和相对路径(相对Nginx的主配置目录),确保文件路径正确,修改配置后记得执行nginx -t检查配置语法,没问题再重启Nginx生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:27:03