V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
quietjosen
V2EX  ›  SSL

说说我的网站升级 https、及图床搬家历程

  •  
  •   quietjosen · 2016-12-09 00:00:33 +08:00 · 7138 次点击
    这是一个创建于 2688 天前的主题,其中的信息可能已经有所发展或是发生改变。

    二话不说先上图:

    是的,升级完之后得到的就上面几把小绿锁。当然,只是几个小站,如果看官误解为大站的 https 架构升级,抱歉了…

    有必要这么折腾吗?

    先说 2 则消息提提神:

    • 2017 年 1 月 1 日苹果 iOS 应用推行 ATS 安全标准,将强制使用 HTTPS 安全连接;
    • 谷歌 Chrome 将把所有的 HTTP 网站标记为「不安全」

    可见全站 HTTPS 化是大势所趋。就算是小博客、小网站,也不想被拍为「不安全」吧。于是,在 2016 年的尾巴时,折腾了一把。

    Https 证书

    其实,更应该说「免费」的 Https 证书更合适。因为付费的证书其实很多,而我等小博主,还是用用免费的好了。可能大家都知道,目前最有名的免费证书就是 Let's Encrypt 了(另外一个免费、但有黑历史的我就不说了)

    可以使用 Certbot 来自动更新 Let's Encrypt 证书,服务器端我用的是 Ubuntu ,直接照着官网教程就可以生成证书了:https://certbot.eff.org/#ubuntuxenial-nginx

    有了证书之后,就是如何应用到网站中,这个就要看大家具体是如何搭建、托管博客的。我是用的 Nginx ,照着这里的步骤就可以了:https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04

    有了上面这 2 步,就完成 https 升级本身的在部分事情了。可能你并不知道, https 和 https 也是不同的,主要是安全级别上不一样。具体的,可以到一些测试网站上查查自己的 https 是什么级别,比如 https://www.ssllabs.com/ssltest/analyze.html 我的小站是 A-,虽然可以再加把劲升级到 A+,想想 2/8 原则也就算了。

    Https 与小绿锁

    做了上面的事后,浏览器中并不一定会显示可爱的小绿锁。为什么?因为网站可以还引用了别的 http 资源,比如 js 、 css 、图片、等等。必须全站资源均是 https ,才会在浏览器地址显示小绿锁。

    图床搬家

    好了,来到迁移最麻烦的部分:图床搬家。因为自己的博客已经有好几年了,搬家 N 次,还由 WordPress 迁移至 Markdown (Hexo 引擎 + Next 主题),其中混杂着又拍云、新浪微博图床、七牛、一般图片、等各种来源的图片,想把这些图片全找出来、重新上传至支持 https 的图床、更新文档中的链接,还是挺绝望的。

    不管怎样,已经搞定了,来回顾下我的方案吧。

    图床选择

    国内

    国内选的是 七牛

    另外一个强劲的候选是阿里云 OSS ,因为我总是觉得阿里云 OSS 比七牛快(之前的一些感性经验,并无实测数据,况且这和网络情况严重相关,在你那快、而你的用户不一定快,很难有权威的测试数据)

    最后选择七牛最大的原因是:,也就是价格。阿里云 OSS 的流量价格大概是七牛的 2 倍,即使买流量包也比七牛稍贵些。具体的,大家可以看下面的官网链接:

    需要说明的是,七牛有所谓的免费流量,但这免费流量只适用于 http 流量、不适用于 https 流量,算是个小坑 + 鸡贼吧。

    确定图床后,就在七牛上新创建了资源。并没有使用自己域名的 https 链接,因为没有备案(备案好可怕…),直接使用了七牛的 https 二级链接,如 https://xxxx.qnssl.com

    国外

    国外选的是 Flickr

    存储方面, Flickr 有 1T 空间,绝对够用了。

    速度方面,之前在 http://www.17ce.com/ 上测试了下,即使是在国内, Flickr 的访问速度尚可、比 Imgur 快;国外应该也没问题。

    于是,也就懒得再去用 Amazon S3 之类的专业图床,直接定 Flickr 了,并且链接还是支持 https 的。

    统一图片链接

    这有什么说的呢?

    主要是为可能的再次搬家埋伏笔。如果直接使用七牛的二级链接( 如 https://xxx.qnss.com ),那么下次如果需要搬家,就要把之前文档中的链接全部更新,或者使用 Nginx 相关的代理、跳转机制,总是有些麻烦,所以用了一个自己的域名进行跳转。

    方法就是,先确定一个固定的图片域名: https://p.ilib.io 然后将其重定向至 https://xxxx.qnss.com 具体的,就是在 Nginx 中配置:

    rewrite ^/cn/(.*)$ https://xxx.qnssl.com/$1;
    

    这样,访问如 https://p.ilib.io/cn/abc.jpg 时,会重定向至 https://xxx.qnssl.com/abc.jpg

    好处是:

    • 灵活,之后如果再次搬家,只要修改这里的配置即可;
    • 另外,还可以为国外图床配置对应的跳转。

    坏处是:

    • 慢了一点,因为要多进行一次 p.ilib.io 的域名解析。
    • 不过,这一方案也可以用域名解析的显式 URL 跳转进行改进,会快很多。只是我现在用的是 DNSPod 解析域名,需要 30 天后才能进行显式 URL 跳转,到时再更新吧。

    已有图片搬家

    新图床确定了,接下来就是要把已有的 Markdown 文件中的图片迁移至新图床。

    这事怎么办呢?

    为了这事,我专门做了个 App: iPic Mover,可以选择 Markdown 所在目录,一键迁移 Markdown 中所有图片至新图床,具体看图:

    iPic Mover 更多介绍

    插入新图片

    到这里, https 证书配置好了、已有图片也搬家了,已经可以看到可爱的小绿锁了。那么,之后新的图片,该怎么插入到 Markdown 文件中呢?毕竟上面说了,又是七牛、又是 Flickr 的,直接插图还是挺麻烦的。

    还好,有了 iPic,可以一键上传图片至图床、生成 Markdown 链接。

    晒晒我的图床吧(有些是测试用):

    尾巴

    说说博客吧。

    折腾这么多,就为了小绿锁,值吗?尤其,现在还有人写博客吗?还需要专门搞个图床搬家的工具吗?

    诚然,现在是快消费时代,大家的注意力是涣散的,看个搞笑视频都要快进,更别说读长文,更更别说写长文了,更更更别说为文章配个合适的图。

    但,反过来说,大家对信息的渴求是一贯的,在网上搜索信息,都想能最快的得到权威的、组织优良的答案。尤其是程序员这个行当,简直是面向 Google 编程。而很多 Google 给出的答案,都是一些优秀的博客。

    所以,我相信博客依然会有其一席之地;而写博客的人,值得被尊重、被关注,值得拥有趁手的工具。

    40 条回复    2016-12-20 21:06:13 +08:00
    Delbert
        1
    Delbert  
       2016-12-09 00:10:44 +08:00 via Android
    表示所有的 https 链接,需要证书的隧道 vpn 通通无法访问。 HTTP 的正常,请问如何破解……
    是的,连百度都没法访问了,只能用 Bing ……
    quietjosen
        2
    quietjosen  
    OP
       2016-12-09 00:19:36 +08:00 via iPhone
    @Delbert 哎,你这问题听起来好牛……
    just1
        3
    just1  
       2016-12-09 00:21:09 +08:00 via Android
    ws1.sinaimg.cn 用 https
    Delbert
        4
    Delbert  
       2016-12-09 00:26:08 +08:00 via Android
    @quietjosen 是的,因为需要用代理访问外网。想搜个东西都打不开,什么 askUbuntu ,什么 stackoverflow 。 pip 还好,可以强制 http , openstack 的源无解啊。。。只有官方源, https 的……
    levie
        5
    levie  
       2016-12-09 00:32:55 +08:00
    我懒得折腾就国内外都用 V2EX 图床……🙈
    CloudnuY
        6
    CloudnuY  
       2016-12-09 00:37:58 +08:00
    @Delbert 看看 VPN 的服务器能访问其他网站的 443 端口吗
    Tink
        7
    Tink  
       2016-12-09 00:42:00 +08:00
    我是 A
    guofs
        8
    guofs  
       2016-12-09 00:49:10 +08:00 via Android
    七牛 cdn 部署 https 的话也没法用免费套餐?
    smallaccount
        9
    smallaccount  
       2016-12-09 00:55:18 +08:00 via iPhone
    感谢楼主
    顺便问下楼主那个上传微博图片的 python 脚本是怎么实现验证的, headers 部分
    具体我也说不清楚,您不明白的话我明天用电脑再问一次
    quietjosen
        10
    quietjosen  
    OP
       2016-12-09 01:13:43 +08:00
    @just1 恩,貌似最近微博图床的 https 证书升级了。
    quietjosen
        11
    quietjosen  
    OP
       2016-12-09 01:14:56 +08:00
    @levie 其实都靠谱的,也许自己的网站倒了, V2EX 的图床也不见得会倒…
    quietjosen
        12
    quietjosen  
    OP
       2016-12-09 01:15:22 +08:00
    @guofs 是的,确定、肯定。
    quietjosen
        13
    quietjosen  
    OP
       2016-12-09 01:16:14 +08:00
    @smallaccount 并不是用 Python 实现的,而是调用 iPic 传图、基于 Swift 的。
    quietjosen
        14
    quietjosen  
    OP
       2016-12-09 01:16:52 +08:00
    @Tink A 记录、还是啥?
    Tink
        15
    Tink  
       2016-12-09 01:18:04 +08:00
    @quietjosen 打分
    quietjosen
        16
    quietjosen  
    OP
       2016-12-09 01:18:20 +08:00
    说话, V2EX 右侧的广告是非常内容相关的嘛。这个帖子在说 https 及图床的事,右侧就是 Let's Encrypt 及其他相关的链接。
    quietjosen
        17
    quietjosen  
    OP
       2016-12-09 01:18:50 +08:00
    @Tink 哦哦,那你比较我厉害 👍
    smallaccount
        18
    smallaccount  
       2016-12-09 01:28:28 +08:00
    def get_upload2weibo_cookie():
    """
    获取微博 cookie
    :return:
    """
    headers = {
    'Host': 'wb.ilib.io',
    'access': '6L+Z5Liq5piv57uZSmFzb27nmoTlm77luornlKjnmoQ=',
    'app': 'ipic',
    'Accept': '*/*',
    'User-Agent': 'iPic/120 CFNetwork/807.0.3 Darwin/16.0.0 (x86_64)',
    'Accept-Language': 'en-us',
    }
    res = requests.get('http://wb.ilib.io/api/cookie/weibo', headers=headers).json()
    return res['cookie']

    这个代码是怎么搞的。。。
    res = requests.get('http://wb.ilib.io/api/cookie/weibo', headers=headers).json()
    这个是什么意思?
    quietjosen
        19
    quietjosen  
    OP
       2016-12-09 03:10:50 +08:00   ❤️ 1
    @smallaccount 这个,邮件讨论吧: iToolinbox#gmail.com
    hqfzone
        20
    hqfzone  
       2016-12-09 09:12:48 +08:00
    为了统一图片链接,搞跳转,有必要这么拐弯么?一条正则替换的事儿!
    quietjosen
        21
    quietjosen  
    OP
       2016-12-09 09:19:10 +08:00
    @hqfzone 我也发现会慢点,先这么着,看一段时间,试过 URL 显式跳转再说。
    guoer
        22
    guoer  
       2016-12-09 10:11:29 +08:00 via iPhone
    为啥不用 cname
    serve99
        23
    serve99  
       2016-12-09 10:17:07 +08:00
    @quietjosen 你用的这 https 的 Let's Encrypt ,真会是永久免费的吗?其他好多 https 好像都只是 1 年,然后每年的费用都很高。。。不知你这个是不是真的一直免费。
    quietjosen
        24
    quietjosen  
    OP
       2016-12-09 10:26:56 +08:00 via iPhone
    @guoer 可耻的没备案……
    quietjosen
        25
    quietjosen  
    OP
       2016-12-09 10:29:19 +08:00 via iPhone
    @serve99 哦,我以为大家都知道这个梗就没说……

    Let's Encrypt 证书一次 90 天,使用 Cerbot 可以定期更新,结果就是一直免费了。
    guoer
        26
    guoer  
       2016-12-09 11:26:44 +08:00 via iPhone
    @quietjosen cname 不需要备案吧
    quietjosen
        27
    quietjosen  
    OP
       2016-12-09 11:33:56 +08:00 via iPhone
    @guoer 我是说,如果要 cname 到七牛,七牛需要我的域名备案。
    Delbert
        28
    Delbert  
       2016-12-09 12:28:23 +08:00 via Android
    不是端口问题,是证书。只要有证书的都过不去。
    stneng
        29
    stneng  
       2016-12-09 12:51:35 +08:00
    建议把 css js 也用上 cdn ,可以快一些。
    另:个人感觉七牛容易抽风,我前几天抽了,慢得要死,换成又拍了。。。(仅个人感觉)
    stneng
        30
    stneng  
       2016-12-09 12:53:53 +08:00
    @stneng 另外,又拍的 https 请求费用有点小贵,我请求费比流量费还高。。。(幸好我站小,没几个访问量)
    quietjosen
        31
    quietjosen  
    OP
       2016-12-09 14:27:57 +08:00
    @stneng 恩,我也是小站,要求没那么高;坦白讲,还是比较在意「成本」的。

    如果真觉得抽,可以弄个监控(比如 360 监控),每 10 分钟测试一次,出问题就短信报警。这样监控一段时间,看是否稳定。
    stneng
        32
    stneng  
       2016-12-09 14:50:48 +08:00
    @quietjosen 抽了不是指打不开,是很慢而已。。。(能快一点是一点吧。。。)
    成本如果是小站的话,用哪儿的都差不多吧。反正流量不大。。。
    quietjosen
        33
    quietjosen  
    OP
       2016-12-09 14:53:41 +08:00
    @stneng 确定,成本可以是 10 块 和 20 块 的差别,绝对量并不大。

    对我来说,七牛的稳定性,配我的小站,够了。因为木桶原因,最缺的并不是速度、稳定性,而是小站的内容、能给用户带来的价值。当然,我也想让小站飞起…
    quietjosen
        34
    quietjosen  
    OP
       2016-12-09 14:54:11 +08:00
    @stneng 打错字了,「确实,成本可能是 10 块 和 20 块 的差别」
    stneng
        35
    stneng  
       2016-12-09 14:56:30 +08:00
    @quietjosen 是啊,感觉您的站量不小吧, iPic 挺有名的。
    另:我貌似 A+了。。。(逃
    stneng
        36
    stneng  
       2016-12-09 15:03:45 +08:00
    @quietjosen 刚看到 WP 的迁移还没解决,给个建议,其实我感觉迁移图床可以有更好的方案。
    我目前都是将图片直接上传到站点,然后各种云储存都有镜像迁移的功能,直接镜像迁移就好了,切换根本没有烦恼。。。
    quietjosen
        37
    quietjosen  
    OP
       2016-12-09 16:48:48 +08:00
    @stneng iPic 只是在小圈子里有点知名而已…

    我这边主要是有历史包袱:在各种图床的旧图。如果一开始就像你说的,所有图都在一个地方,搬起家来确实方便。不过,现在已经在一个地方了,现在就可以按你的方式做了。
    KanVivii
        38
    KanVivii  
       2016-12-20 11:56:09 +08:00
    看到说 oss 比七牛快 但是我发现 oss 没有写自带 CDN 呀 可是七牛写了带 CDN

    oss 和七牛还有腾讯的 一直很纠结到底用哪个
    quietjosen
        39
    quietjosen  
    OP
       2016-12-20 16:56:16 +08:00
    @KanVivii 哎,文中也说了,只是感性数据,而且跟我这的网络环境有关。

    纠不纠结的,试试呗。
    KanVivii
        40
    KanVivii  
       2016-12-20 21:06:13 +08:00 via iPhone
    @quietjosen 因为人在国外所以才觉得七牛貌似快
    v2ex 的图库速度也不错的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5284 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:34 · PVG 16:34 · LAX 01:34 · JFK 04:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.