Nginx防盗链设置

原文链接:Nginx防盗链设置 - Liu Zijian's Blog 

1.防止盗链

要防止特定路径下的图片被盗链,可以在Nginx配置中针对图片文件的请求进行防护。以下是一个示例配置,假设你的图片存放在/img/路径下:

server {
    listen 80;
    server_name *.liuzijian.com;

    location /img/ {
        valid_referers none blocked *.liuzijian.com;
        if ($invalid_referer) {
            return 403;  # 返回403 Forbidden
        }

        alias /public/img/;

        

    }
}

注意:为防止目录穿越,alias使用时,location /img/需要使用/闭合,不可写成location /img,以下同理。

解释:

  • location /img/ 仅针对/img/路径下的请求。
  • valid_referers 指令确保只有来自你的域名的请求可以访问这些图片。

重新加载Nginx配置后,这将有效防止其他网站直接链接到你存放在/img/路径下的图片。

2.允许例外

如果你希望在某个特定图片上允许盗链,可以进行更细粒度的控制。

server {
    listen 80;
    server_name *.liuzijian.com;

    # 允许盗链的特定图片
    location = /img/logo.jpg {
        # 允许所有Referer
        add_header Access-Control-Allow-Origin *;

        alias /img/logo.jpg;
    }

    # 其他图片路径的防盗链设置
    location /img/ {
        valid_referers none blocked   *.liuzijian.com;
        if ($invalid_referer) {
            return 403;  # 返回403 Forbidden
        }

        alias /public/img/;
        
       

    }







}

解释:

  • location = /img/logo.jpg 允许对特定图片的访问,无论Referer如何。
  • add_header Access-Control-Allow-Origin *; 可以使该图片支持跨域访问(如果需要)。

这样配置后,只有logo.jpg会被允许盗链,而其他图片则受到保护。请根据需要调整文件路径和配置。

3.阻止某个目录下特定格式图片被访问

location ~* ^/img/.*\.(jpg|png|gif)$ {
    deny all;
}

解释:

这段 Nginx 配置的作用是禁止访问特定路径下的图片文件。具体来说,它禁止了 /img/ 目录下的所有 .jpg.png 和 .gif 文件的访问。

~*: 这是一个正则表达式匹配操作符,用于进行不区分大小写的正则匹配~ 表示大小写敏感的正则匹配,而 ~* 表示不区分大小写。

^/img/.*\.(jpg|png|gif)$: 这是匹配请求路径的正则表达式。具体解析如下:

  • ^/img/: 以 /img/ 开头的路径。
  • .*: 匹配零个或多个任意字符(即匹配 /img/ 目录下的所有文件及子目录)。
  • \.(jpg|png|gif): 匹配以 .jpg.png 或 .gif 结尾的文件名。注意:\. 是转义字符,表示字面上的点号 .
  • $: 匹配字符串的结尾,确保正则匹配到文件扩展名的结尾。

总结来说,这个正则表达式会匹配所有位于 /img/ 路径下,且扩展名为 .jpg.png 或 .gif 的文件(不区分大小写)。

deny all;

  • deny all;: 这条指令表示拒绝所有人访问符合上述 location 条件的文件。也就是说,任何请求访问 /img/ 目录下的 .jpg.png 或 .gif 文件,都会被返回一个 403 Forbidden 错误,禁止访问。
<think>嗯,用户让我介绍一下Nginx防盗链,我得先理清楚防盗链的基本概念和常见方法。首先,防盗链是为了防止其他网站直接链接到自己的资源,比如图片、视频,这样会消耗自己的带宽。Nginx作为常用的Web服务器,肯定有相关的配置方法。 我应该先解释什么是盗链,以及为什么需要防盗链。用户可能不太清楚具体原理,所以得用简单的例子说明。比如,如果别人网站直接用了你服务器上的图片链接,每次访问都会占用你的流量,导致成本增加。 接下来,常见的防盗链方法有哪些呢?我记得主要是基于HTTP Referer头来判断请求来源。Nginx可以通过配置valid_referers指令来限制访问来源。需要详细说明如何配置这个模块,包括允许的域名和禁止后的处理,比如返回403或者重定向。 另外,可能需要提到使用secure_link模块进行更高级的控制,比如生成加密链接,但用户可能更关注基本方法,所以这部分可以简要带过,作为扩展知识。 还要注意配置语法的正确性,比如在server或location块中添加valid_referers,以及使用if语句判断无效的referer。同时,提醒用户某些浏览器或情况下referer可能为空,需要特别处理,比如允许空的referer,或者使用meta标签来影响referer策略。 用户可能想知道如何测试配置是否生效,可以建议他们使用curl命令模拟不同的referer来检查响应。例如,curl -e参数指定referer,看看是否返回403。 另外,可能需要注意Nginx的配置语法是否正确,比如指令后面是否有分号,括号是否正确闭合,避免配置错误导致服务器重启失败。所以,在给出示例配置时,必须确保LaTeX格式正确,同时配置代码也要正确无误。 最后,总结一下防盗链的重要性和配置步骤,确保用户能够按照步骤操作。同时,提醒用户根据实际需求调整允许的域名,处理可能的异常情况,比如允许搜索引擎的抓取,或者特定的合作伙伴站点。 可能需要检查是否有遗漏的细节,比如valid_referers的不同参数,none、blocked、服务器名称等,以及如何组合使用。确保用户能够灵活应用这些参数来满足不同的需求。 总的来说,结构应该分点说明,先介绍概念,再讲配置方法,然后示例,注意事项和测试方法。确保逻辑清晰,用户能够一步步理解和实施防盗链配置。</think>Nginx防盗链是一种防止其他网站未经授权直接引用本站资源(如图片、视频、文件等)的技术手段。以下是逐步说明: 1. **盗链原理** 当用户访问网站A时,若页面中直接引用了网站B的图片链接(如`<img src="https://B.com/image.jpg">`),实际消耗的是网站B的带宽和服务器资源。 2. **Nginx防盗链实现核心** 基于HTTP请求头中的`Referer`字段判断请求来源。 ```nginx location ~* \.(jpg|png|gif|mp4)$ { valid_referers none blocked server_names *.example.com; if ($invalid_referer) { return 403; # 或返回替代图片:rewrite ^ /anti-hotlink.png; } } ``` - `valid_referers`参数说明: - `none`:允许无Referer的请求(如直接浏览器访问) - `blocked`:允许Referer被防火墙过滤或篡改的请求 - `server_names`:允许本站域名 - `*.example.com`:允许指定域名 3. **扩展方法:加密链接(secure_link)** 通过生成带签名的临时链接实现更严格控制: ```nginx location /files/ { secure_link $arg_md5,$arg_expires; secure_link_md5 "$secure_link_expires$uri$remote_addr secret"; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; # 链接过期 } } ``` 4. **注意事项** - 部分浏览器隐私模式会屏蔽Referer - 可通过`add_header Referrer-Policy "no-referrer";`控制Referer策略 - 使用`curl -e "http://test.com" https://yourdomain.com/image.jpg`模拟测试 - 需配置`server_names`匹配所有合法域名变体(如带www和不带www) 5. **最佳实践** - 对静态资源目录统一配置防盗链 - 结合日志监控异常请求: ```nginx log_format hotlink '$time_iso8601|$remote_addr|$http_referer|$uri'; access_log /var/log/nginx/hotlink.log hotlink if=$invalid_referer; ``` 完整配置示例: ```nginx server { listen 80; server_name yourdomain.com; location ~* \.(jpg|jpeg|png|gif|mp4)$ { valid_referers none blocked server_names *.yourdomain.com ~.google. ~.baidu.; if ($invalid_referer) { rewrite ^ /static/anti-hotlink.jpg; # return 403; } root /var/www/static; expires 30d; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值