如何在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
相关产品推荐
相关产品推荐

