Typecho 优化:实现图片防盗链与1Panel使用


叙述760 阅14 评

这两年来我一直都是使用Nginx Proxy Manage工具来进行反向代理,但近期发现不好使用了,经常登录显示Bad gateway。Docker搭建的Nginx Proxy Manage是由一个npm_app和一个npm_db(mysql)构造,显示Bad gateway的话需要重启npm_db,才能登录,而且是小部分概率才能登录,有时候服务器重启我也无法登录,耗费了许多时间。

今天就使用1Panel进行反代,1Panel跟宝塔类似,上手没有难度,只需要安装OpenResty应用就可以实现反代了。

在不使用CDN的情况下,如何达到防盗链的效果,众所周知:最简单就是图片添加水印,另一个就是服务器端,我是基于Docker搭建的Typecho进行防盗链,本文从Nginx展开,通过百炼deepseek-r1完成。

防盗链效果(Docker 环境专用)

步骤 1:进入 Nginx 容器

# 进入容器(使用容器名称或ID)
docker exec -it typecho_nginx_1 /bin/sh

步骤 2:定位 Nginx 配置文件

cd /etc/nginx/conf.d
ls -l  # 确认存在 typecho.conf

步骤 3:编辑typecho.conf

1.安装编辑器(如容器内无 vim)

apk update && apk add vim   # Alpine 系统
# 或
apt update && apt install vim -y  # Debian/Ubuntu 系统

2.打开配置文件

vim typecho.conf

3.在 server 块内添加防盗链规则
找到 server { ... } 部分,插入以下内容(参考位置):

server {
    listen 80;
    server_name bluehe.cn;
    # ... 其他原有配置 ...

    # 🔐静态资源防盗链(参考位置)
    location ~* \.(jpg|jpeg|png|gif|webp)$ {
        valid_referers server_names ~^([a-z]+\.)?bluehe\.cn$;
        
        if ($invalid_referer) {
            # 返回纯文本错误
            add_header Content-Type text/plain;
            return 403 'You don\'t have permission to access the URL on this server.\r\ndenied by Referer ACL';
        }

        expires 30d;
        access_log off;
        add_header Cache-Control "public";
        root /var/www/html;
    }

    # 其他原有 location 规则(如 PHP 处理)
    location ~ .*\.php$ {
        # ...
    }
}

步骤 4:验证配置并重启 Nginx

1.保存文件vim 操作:按 Esc → 输入 :wq → 回车
2.检查语法nginx -t输出:nginx: configuration file /etc/nginx/nginx.conf test is successful
3.重载配置(不中断服务)nginx -s reload
4.退出容器exit

步骤 5:验证防盗链效果

场景预期结果验证命令
合法访问✅ 200 OKcurl -H "Referer: https://bluehe.cn" https://bluehe.cn/图片地址
直接访问❌ 403 Forbiddencurl -I https://bluehe.cn/图片地址
第三方盗链❌ 403 Forbidden在其他域名页面嵌入图片链接

不过也发现了一个问题,开启防盗链后,主流rss工具订阅了我的rss之后,图片显示都会失效,原先的图文显示rss内容已经不在适用,所以只能从CustomRSS插件更换到AriaRSS插件。

最后更新 2025-03-04
评论 ( 14 )
  1. 发现一个问题,图片防盗链之后,友情链接图标也失效了。

    2025-03-07 07:56湖南省娄底市回复
    1. 寻鹤 博主
      @ymz316

      是的,全站只要没有通过bluehe.cn主域名,都会拦截,我需要找个图床来存储一些不需要拦截的图片。

      2025-03-07 13:24广西回复
  2. 我的目前没做处理,主要是很多其他域名也在用,处理起来太麻烦了。
    不过这倒是个不错的办法。

    2025-03-06 16:27山东省青岛市回复
    1. 寻鹤 博主
      @obaby

      1panel自带的也够用,多域名就不方便了,没必要不动核心,稳定为主。

      2025-03-06 20:50广西回复
  3. 右侧目录索引很漂亮,他们盗取链接的目的是什么啊?我看不少都说这个。

    2025-03-06 10:48亚太地区回复
    1. 寻鹤 博主
      @Jeffer.Z

      可能更多就是喜欢消耗别人的站点流量。从我角度来看,我就希望自己规避流量消耗,毕竟我云服务器是按量计费。

      2025-03-06 16:20广西回复
  4. cdn上设置了防盗链,要不然被刷太多了。

    2025-03-05 07:35河南省漯河市回复
    1. 寻鹤 博主
      @网友小宋

      有效措施都加上,稳定为主。cdn我没用,主要是需要购买流量包,免费的话又不放心。

      2025-03-05 10:43广西南宁市回复
  5. 特别是图片多的博主,一定要做图片防盗链,现在蜘蛛太厉害了

    2025-03-04 22:36湖北省武汉市回复
    1. 寻鹤 博主
      @Andy烧麦

      对的,比如我的图片是真的多,要限制图片流量了。

      2025-03-04 22:41广西回复
  6. 1panel 网站 设置 里好像就有防盗链设置。

    2025-03-04 21:51河北省保定市回复
    1. 寻鹤 博主
      @沉沦

      有的,不过只实现了第三方盗链,直接访问还是可以显示图片,当我使用上述文章,两种都可以实现。

      2025-03-04 22:17广西回复
  7. 一直用的 apache2,虽早已知道 Nginx 的强大,但总是以各种理由止步,找个时间定要深入学习和实验一番。

    2025-03-04 21:22湖南省娄底市回复
    1. 寻鹤 博主
      @ymz316

      可以的,nginx也深入可以挖掘。

      2025-03-04 22:19广西回复