网站迁移,全站启用HTTPS

Author Avatar
Lussac 2019年05月25日 ; Views: 2810
  • 在其它设备中阅读本文章

目前已全站启用 HTTPS


选择主机商

下面是一些个人吐槽,你可以选择 >> 跳过 <<

DigitalOcean NMSL

之前本站一直架设在 Bandwagon 上,虽然便宜倒也一直稳定。而且同一 VPS 上还同时托管了好几个网站(如 getnote.cf ),搭建的 ss 速度也算不错。用了两年快到期了,换套餐的话现在最低 $49.99/ 年,比起当时 $19.99/ 年 可是贵了一倍不止。可惜搬瓦工更新换代,OpenVZ 架构的主机不支持续费了,只得进行迁移。
一开始从 Linode,DigitalOcean,Vultr 中选择了 DO,主要是 Linode 只能使用信用卡付款。

但 DO 着实把我恶心到了。刚注册好账号用 PayPal 付了 5 刀,直接就退款还把我账号锁了,简直莫名其妙。从 5 月 13 日注册起,到现在 5 月 25 号,我一共发了 3 个 Tickets,不断询问它们为什么要锁定我的账户。我甚至还跑去问 PayPal 客服为什么会退款,结果客服告诉我是 DO 那边拒收了。三个 Tickets 全都是敷衍回复,说什么:

  • "We appreciate your patience during this process."
  • "If you have any other questions, please let us know, we are always here to help."
  • "I am passing this ticket over to our Security team for further review."

通篇只字不提为什么我的账户会被锁定,我询问该提供什么信息来解锁账户也直接不理。回复 Tickets 的速度更是 1~3 天回一次,24 小时起步。

¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ ShitalOcean NMSL

这么差的服务态度我真是第一次见。正在考虑 DigitalOcean 的,主观上我真的不推荐你去尝试。

Vultr

最后还是选择尝试使用 Vultr。从注册到支付 $10 并成功创建实例,几分钟便完成了,由此可见 DigitalOcean 是真的哈批。

但是 ss 的速度确实比搬瓦工慢了不少,可能是对国内移动网络不太友好。如果用上一段时间后,速度一直一般的话,我可能还会迁回搬瓦工。


LNMP

由于几个网站一直都是部署在 LNMP 环境下,而且我对 nginx 更熟悉一些。这次依然选择使用 LNMP 一键安装包 ,只是从 LNMP1.4 换成了 LNMP1.5 。同时把 PHP 5.5.38 换成了 PHP 7.2.6。

注意把 /home/wwwroot/default 下的文件和文件夹通过移动、重命名隐藏起来。

值得一提的是:在 LNMP1.5 中,增加了 LetseEcrypt 通配符 / 泛域名 SSL 证书生成,官网上有 泛域名 SSL 教程


网站迁移

对于 LNMP 环境,网站从 LNMP1.4 迁移到 LNMP1.5 配置有几点需要注意:

  • 修改 /usr/local/nginx/conf/vhost/域名.conf

    # LNMP1.4 使用以下语句配置 Rewrite rule
    include other.conf
    
    # 而 LNMP1.5 改为
    include rewrite/other.conf
  • 修改完 nginx 的 .conf 文件后,需要重启 nginx 才能生效。
    /etc/init.d/nginx restart

下面对每个网站的迁移过程分别记录,以便日后再次迁移的可能。


Typecho: blog.lussac.net

首先配置 SSL 证书,使用的是免费的 Let's Encrypt 。配置过程参照教程:

完整迁移 Typecho 并不是特别复杂:

  1. 从原 VPS 打包站点目录下所有文件。(打包不了以 . 开头的文件,如 .gitignore ,请手动迁移)
    zip -r blog.lussac.net_backup.zip ./*
  2. 转移 blog.lussac.net_backup.zip 到目标 VPS 的 /home/wwwroot/blog.lussac.net
    unzip blog.lussac.net_backup.zip
  3. 通过 phpMyAdmin 新建数据库 Typecho
  4. 修改 DNS 解析,把原 VPS 的 IP 改成目标 VPS 的 IP。等待生效。
  5. 移走目标 VPS 上 Typecho 的配置文件 config.inc.php ,访问域名并配置 Typecho ,重新建立数据库绑定。(因为从 PHP5.5.38 换成了 PHP7.2.6, 是 Pdo_Mysql 的问题)
  6. 通过原 VPS 的 phpMyAdmin 导出原 Typecho 所有数据表为 backup.sql 文件。
  7. 导出目标 VPS 上 Typecho 所有数据表,作为备份。
  8. 通过目标 VPS 的 phpMyAdmin 将 backup.sql 导入。

接下来确保全站启用 HTTPS,首先将所有 HTTP 请求 (80 端口) 跳转到 HTTPS (443 端口):

  • 修改 /usr/local/nginx/conf/vhost/域名.conf

    listen 80;
        #listen [::]:80;
        server_name example.com ;
    
        # 添加下面这句
        return 301 https://example.com$request_uri;
    
  • 同样在 域名.conf 中,把 server{ 80 } 的 Rewrite 规则复制到 server{ 443 } 中。

接下来逐步查找博客中对站内资源的 http 引用(主要是图片资源),全部更换成 https。

  1. 登录 Typecho 后台 -> 设置 -> 基本设置 -> 站点地址改成 https 的域名。
  2. 编辑 Typecho 站点根目录下的 config.inc.php ,加入下面一行配置,否则网站后台还是会调用 HTTP 资源。

    /** 开启HTTPS */
    define('__TYPECHO_SECURE__',true);
  3. 使用 Chrome 浏览器打开网站,F12 打开审查元素,查看 Sources 和 Network ,逐一定位对 HTTP 资源的引用。主要是每篇文章的头图、文章内对以附件形式上传的图片的引用。后台无法修改的可以尝试去数据库中修改,但注意做好备份。一一修改直到网站每个页面都显示小绿锁。

更多细节请参照:


getnote.cf

  1. 从原 VPS 打包站点目录下所有文件。(打包不了以 . 开头的文件,如 .gitignore ,请手动迁移)
    zip -r getnote.cf_backup.zip ./*
  2. 转移 getnote.cf_backup.zip 到目标 VPS 的 /home/wwwroot/getnote.cf
    unzip getnote.cf_backup.zip
  3. 启用 HTTPS ,在 index.php中修改 $base_urlhttps://getnote.cf
  4. 因为压缩打包解压后,文件所有者都变为 root ,程序没有权限修改。所以需要修改文本保存目录中文件的权限。

    cd /home/wwwroot/getnote.cf/text
    chown www:www *
    chown root:root .htaccess

其他

此外,我还为 Typecho 添加了几个插件。现在文章顶部启用了浏览次数统计,当然因为之前没有进行数据统计,现在就相当于重新开始了。


参考资料

  1. 常见问题 - LNMP 一键安装包
  2. 使用 LNMP 常见问题解答 - 小夜博客 - WIKI 教程
  3. LNMP Nginx http 跳转到 https, 不带 www 跳转到 www 域名 - 外贸 SOHO 笔记