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

如何使用Nginx阻止特定文件夹内文件的直接链接访问?

解决方案

你的现有配置存在两个核心问题:

  1. 第一个location直接通过allow localhost; deny all;拦截了所有非本地请求,包括自身域名页面加载字幕的请求;
  2. 两个正则location都匹配.vtt文件,Nginx会优先执行先定义的规则,导致第二个location永远无法生效。

可以通过Nginx的valid_referers指令实现「允许自身域名加载、阻止直接链接访问」的需求,以下是修正后的配置:

location ~* \.(vtt|srt|txt)$ {
    # 配置合法的Referer来源:
    # - server_names:匹配当前server块中定义的域名
    # - *.yourdomain.com/yourdomain.com:替换为你的实际域名(含带www和不带的情况)
    # - localhost/127.0.0.1:允许本地测试请求
    # - blocked:允许被代理/防火墙修改过的Referer(部分合法请求会出现这种情况)
    valid_referers blocked server_names *.yourdomain.com yourdomain.com localhost 127.0.0.1;

    # 若Referer不合法(比如直接输入URL访问),返回403禁止访问
    if ($invalid_referer) {
        return 403;
    }

    # 如果你需要将.vtt文件交由PHP处理,保留以下配置段;否则可删除
    if ($uri ~* \.vtt$) {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.vtt)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        # 补充必要的FastCGI参数,确保PHP能正确处理请求
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

关键说明

  • 移除none:valid_referers中不要加none,否则会允许无Referer的直接访问请求;
  • 替换域名:务必将*.yourdomain.com和yourdomain.com替换为你实际使用的域名;
  • 配置验证:修改后执行nginx -t检查配置语法,无误后执行nginx -s reload生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:45