惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
D
Docker
腾讯CDC
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
IT之家
IT之家
WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
博客园 - 【当耐特】

Liu Zijian's Blog | 一个技术博客

使用Certbot自动续签HTTPS证书 使用Filebeat采集Nginx日志到ES Python的协程 Python中的异常 Python中的类和对象 Python的函数 Python的数据结构,推导式、迭代器和生成器 Spring AI集成多模态模型 LangChain4j多模态 LangChain Tools工具使用 Python中的模块和包 Python全局环境和虚拟环境(venv) LangChain Prompt提示词工程 LangChain4j Tools工具使用 基于Dify搭建AI智能体应用 LangChain4j RAG检索增强生成 Spring AI实现MCP Server Spring AI集成MCP Client LangChain4j Prompt提示词工程 Spring AI使用知识库增强对话功能 Spring AI实现一个智能客服 Spring AI实现一个简单的对话机器人 实现MinIO数据的每日备份 自己实现一个DNS服务 简单理解AI智能体 大模型和大模型应用 LangChain开篇 LangChain4j开篇 一个解析Excel2007的POI工具类 DataPermissionInterceptor源码解读
Nginx防盗链设置
Liu Zijian · 2024-10-27 · via 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 错误,禁止访问。