V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zkdfbb
V2EX  ›  分享创造

关于新浪微博开始限制外链,以及聚合图床的本地化部署

  •  4
     
  •   zkdfbb · 2019-04-11 23:05:49 +08:00 · 7639 次点击
    这是一个创建于 2083 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近这几天看到 V 站上有不少讨论说新浪微博开始限制外链了,感觉到处蹭免费图床的日子终究不太安心,250 天前做了一个聚合图床专门用来未雨绸缪解决这种问题的,当时还在 V 站上发了帖子

    https://www.v2ex.com/t/477060#reply85

    当时想解决的一个是一次上传,多次分发,然后提供一个跳转的链接来重定向,比如像下面这张图片:

    https://www.superbed.cn/info/5caea03b3a213b041703f55a

    对应一个跳转的链接:

    https://pic.superbed.cn/item/5caea03b3a213b041703f55a

    使用图片的时候直接用跳转链接就可以了,后台会检测上传到的三个图床如 微博,阿里,搜狐的链接的有效性,比如这个时候微博开始限制链接了,比如你的网站是 https://xxx.com, 后台会使用 referer: https://xxx.com 来检测,微博有效则直接重定向到微博的地址,如果检测的时候返回 403 了,则轮换到下一个。如果有一天这三个都失效了,后台会自动再上传,而你引用的地方完全不需要更新,对页面引用是透明的。

    我自己的几个网站一直在用,很方便,终于可以统一管理所有的图片了,而且也不用担心存储空间什么的,什么图片都往上仍就好了。

    当然还是有很多人担心我这个说不定哪天就倒闭了,第一是不敢直接用跳转链接,只把它当一个上传的图床,使用的还是微博或者阿里的链接,比较大厂会比较安心一点,即便我这个站不在了至少图片是没有问题的,当然这么用也是 OK 的,虽然我没有这个担心~~

    既然有很多人担心,于是我花时间搞了一个 docker 镜像出来,用于部署。目前源码应该是不打算直接开源了,毕竟写代码都是有成本的,开源与否都是个人选择,打算长期维护的东西需要精力,各位应该也都理解,请勿喷,现在直接说一下怎么安装。

    首先安装一下 docker 和 docker-compose,这个不会安装的直接在网上找一下好了。

    然后写一个 docker-compose.yml

    version: '3.3'
    services:
      mongo:
        image: mongo
        volumes:
          - mongo_db:/data/db:rw
        restart: always
        privileged: true
    
      redis:
        image: redis
        volumes:
          - redis_db:/data:rw
        restart: always
        privileged: true
    
      rabbitmq:
        image: rabbitmq:management
        restart: always
        privileged: true
    
      superbed:
        depends_on:
          - mongo
          - redis
          - rabbitmq
        image: zkdfbb/superbed
        ports:
          - "8000:8000"
        volumes:
          - ./config.sh:/code/config.sh
          - ./images:/code/static/images
        restart: on-failure
        privileged: true
    
    volumes:
      mongo_db:
      redis_db:
    

    再提供一个配置文件 config.sh

    export SUPERBED_TOKEN=
    export SUPERBED_TONGJI=
    export ADDRESS="http://192.168.1.1:8000"
    export ENDPOINTS=alicdn,sohu,sogou
    export ADMIN_USER=admin
    export ADMIN_PWD=123456
    export ADMIN_EMAIL=
    
    export MONGO_HOST=mongo
    export MQ_HOST=rabbitmq
    export REDIS_HOST=redis
    export EMAIL_SENDER=
    export EMAIL_SMTP=
    export EMAIL_USER=
    export EMAIL_PWD=
    export Z4A_USER=
    export Z4A_PWD=
    

    其中配置文件的说明如下:

    SUPERBED_TOKEN: 用于授权的 token

    SUPERBED_TONGJI:百度统计,就是 https://hm.baidu.com/hm.js? 后面跟着的那一串 32 个字符,用来安装百度统计的

    ADDRESS:你的网站的地址,可以是域名或者 ip+端口都行

    ENDPOINTS:默认上传的图床,用逗号分隔

    ADMIN_USER:创建的管理员的账号

    ADMIN_PWD:管理员密码

    ADMIN_EMAIL:管理员的邮箱

    EMAIL_SENDER:用户注册时,用来发送注册验证码的邮箱,后面几个 EMAIL_开头的分别是 smtp 地址,用户名和密码

    Z4A_USER/Z4A_PWD:几个使用 chevereto 搭建的图床的用户名和密码,目前支持

    imgchr: https://imgchr.com

    jpgdog: https://jpg.dog

    aphoto: https://a.photo

    imgbb: https://imgbb.com

    z4a: https://www.z4a.net

    miaosu: https://miao.su

    moetu: https://moetu.org

    photouploads: https://photouploads.com

    biuu: https://pic.biuu.me

    imgrpost: https://imgrpost.com

    tryimg: http://tryimg.com

    用户名和密码和 Z4A_USER 类似,就是前面的名称大写加上_USER 和_PWD

    这样会上传到对应图床的自己的账号下面,如果不提供的话就相当于游客上传的

    上传的图床目前支持:

    weibo (需要自己配置微博账号密码,如果非常用地址会遇到验证码,不建议使用)

    sogou

    sohu

    baidu

    juejin

    qihu

    vimcn

    uploadcc

    catbox

    以及上面说的那几个 chevereto 图床

    这两个文件都写完之后,在当前目录使用 docker-compose up -d,等待安装完成,过几秒钟就可以直接用 ip+端口访问了,如果 ADDRESS 是域名,则需要自己配置 nginx 转发,转发的地址是 127.0.0.1:8000,如果 8000 端口已经被占用,则修改一下 docker-compose.yml:

        ports:
          - "8010:8000"  # 将 8000 端口换位 8010 端口
    

    目前小范围测试,可以提供 5 个授权码,也就是 SUPERBED_TOKEN,先到先得 ~

    26 条回复    2019-04-14 07:52:22 +08:00
    qwertyzzz
        1
    qwertyzzz  
       2019-04-11 23:13:27 +08:00 via iPhone
    到!
    kxh
        2
    kxh  
       2019-04-11 23:17:59 +08:00 via Android
    第二到
    zkdfbb
        3
    zkdfbb  
    OP
       2019-04-11 23:25:25 +08:00
    需要的提供一下邮箱吧
    gzlock
        4
    gzlock  
       2019-04-11 23:28:49 +08:00
    “比如你的网站是 https://xxx.com, 后台会使用 referer: https://xxx.com 来检测”
    都有后端做检测了,直接抹掉 referer 再向微博图床请求读图是不是更简单暴力呢
    zkdfbb
        5
    zkdfbb  
    OP
       2019-04-11 23:34:01 +08:00
    @gzlock 如果有防盗链,可能就是不带 referer 返回 200,带 referer 返回 403
    dongisking
        6
    dongisking  
       2019-04-11 23:39:53 +08:00 via Android
    支持,一直在用聚合图床,很好用!
    longyongcai
        7
    longyongcai  
       2019-04-12 04:15:51 +08:00 via Android
    支持
    gzlock
        8
    gzlock  
       2019-04-12 04:43:47 +08:00 via Android
    @zkdfbb 我的意思是用直接用后端做图片的数据转发,算是耗流量但减少代码量的方案🤣
    msg7086
        9
    msg7086  
       2019-04-12 05:33:17 +08:00
    @gzlock 耗流量还要用图床做什么,直接存本地读就行了。和带宽钱比,硬盘才几个钱……
    JmmBite
        10
    JmmBite  
       2019-04-12 06:58:23 +08:00
    bWFvamllbWluZ0BnbWFpbC5jb20=
    gclm
        11
    gclm  
       2019-04-12 07:51:56 +08:00 via Android
    1719982754#qq.com 如果还有吗的话麻烦大佬给我发一个
    8hfq
        12
    8hfq  
       2019-04-12 07:59:45 +08:00
    支持一下。 想要个授权码 NTEwMTE2OTQ5QHFxLmNvbQ==
    SingeeKing
        13
    SingeeKing  
       2019-04-12 08:18:55 +08:00
    好想来晚了……

    singeeking#gmail.com
    Orz
        14
    Orz  
       2019-04-12 08:25:30 +08:00
    i#orz.li thx
    slwl
        15
    slwl  
       2019-04-12 08:38:00 +08:00
    不知道大佬还送不。起来晚了吗? slwl93#gmail.com
    hhhfffhhh
        16
    hhhfffhhh  
       2019-04-12 09:55:12 +08:00
    yaoyige~
    nanaw
        17
    nanaw  
       2019-04-12 10:08:40 +08:00 via Android
    用 referer 字段检测?日常禁用路过。不过这也是个想法,伪造原站的 referer 怎么样?
    cszhiyue
        18
    cszhiyue  
       2019-04-12 13:48:57 +08:00
    测试一下
    hahaba
        19
    hahaba  
       2019-04-12 13:49:42 +08:00   ❤️ 2
    终结!我问了微博消费者 BG 的同事,目前没有打算限制外链,因为历史原因,他们也没有办法进行全量限制,至少未来几年内是不会进行限制
    hmzt
        20
    hmzt  
       2019-04-12 14:28:05 +08:00
    只用请求头限制跟没限制一样,大量的浏览器扩展可以伪造
    zkdfbb
        21
    zkdfbb  
    OP
       2019-04-12 23:36:05 +08:00
    @xunbug 赞赞赞,这样至少微博还是好用的
    Meiyun
        22
    Meiyun  
       2019-04-13 05:59:38 +08:00 via Android
    还是早点做打算,资本家的话不可信
    自己搭建演示:imgurl.org
    作者:xiaoz.me

    ImgURL 是一款使用 PHP + SQLite 3 开发的图床程序,免费开源,支持图像裁剪、压缩、自动鉴黄识别等多种功能,部署简单,管理方便。

    v2.2 更新内容
    新增 API 支持
    优化探索发现,支持分页、图片筛选
    支持自定义提示说明
    修复部分 BUG,优化细节
    ImgURL 已经实现功能
    拽拖上传、多图上传、Ctrl + V 粘贴上传、URL 上传
    图片裁剪,自动生成缩略图
    限制访客上传数量
    图片压缩 /批量压缩
    图片鉴黄 /批量鉴黄
    API 支持
    hahaba
        23
    hahaba  
       2019-04-13 12:24:55 +08:00
    @Meiyun 至少他们比私人搭建的稳
    longyongcai
        24
    longyongcai  
       2019-04-13 13:01:54 +08:00
    @longyongcai
    @xunbug 不是私信发码的吗?
    gz911122
        25
    gz911122  
       2019-04-13 18:27:09 +08:00
    @Meiyun 这个厉害 感谢开源
    Meiyun
        26
    Meiyun  
       2019-04-14 07:52:22 +08:00 via Android
    @xunbug 网络稳而已,哪天被限制多不方便 还是自建方便 本身不是大流量,加加个自动备份 完美
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2618 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.