Nginx防盗链设置

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 错误,禁止访问。

Nginx防盗链设置
https://blog.liuzijian.com/post/e2c56cc3-1002-4f41-aec8-9a69f57e3c3f.html
作者
Liu Zijian
发布于
2024年10月27日
许可协议