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

配置Nginx限制文件夹访问后JPG/PNG仍可访问的问题求助

问题原因

Nginx的正则location匹配遵循配置文件中的书写顺序,哪个正则规则先被匹配到,就优先执行该规则的逻辑。你的配置中,处理图片类型(gif/jpg/png等)的location写在了限制目录的location之前,导致访问data/等受限目录下的图片时,会先命中图片缓存规则,跳过了deny all的拦截逻辑,所以图片能正常加载,而其他未被提前匹配的文件类型则被拦截。

解决办法

方法一:调整Location顺序(推荐)

将限制目录的location移到所有正则匹配的location(图片、JS/CSS等)之前,确保受限目录下的所有请求优先被拦截。修改后的配置片段如下:

location ~ /(data|conf|bin|inc|vendor)/ {
    deny all;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log /dev/null;
    access_log /dev/null;
}

location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log /dev/null;
    access_log /dev/null;
}

方法二:在资源Location中添加目录判断

如果不想调整顺序,可以在图片、JS/CSS的location中增加判断,若请求路径包含受限目录则直接拦截。示例:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    if ($uri ~* /(data|conf|bin|inc|vendor)/) {
        deny all;
    }
    expires      30d;
    error_log /dev/null;
    access_log /dev/null;
}

location ~ .*\.(js|css)?$
{
    if ($uri ~* /(data|conf|bin|inc|vendor)/) {
        deny all;
    }
    expires      12h;
    error_log /dev/null;
    access_log /dev/null;
}

location ~ /(data|conf|bin|inc|vendor)/ {
    deny all;
}

注意:Nginx官方不推荐过多使用if指令,方法一的顺序调整更符合Nginx的执行逻辑,性能更优。

修改完成后,执行nginx -s reload重载配置即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:10:23