迁站笔记


主要更新:

  1. 全站HTTPS
  2. 全站CDN
  3. 服务器内存、硬盘升级。(512M RAM -> 1G RAM, 20G SSD ->25G SSD)
  4. 从SFO1机房迁移至SFO2
  5. Ubuntu14.04 -> Ubuntu18.04

迁站经验:

  1. UpdraftPlus Backups很好用。把wordpress站点上传到Google Drive,再从新的站点把备份下载下来,恢复即可。(同一个google drive app secret只能对应一个client。需要把原来的UpdraftPlus的secret从drive中删掉,新网站上的UpdraftPlus才能连接到drive上。
  2. 等网站内容准备就绪后,最后更改域名的解析IP地址,这样用户感觉不到迁站的,无缝连接。
  3. xmlrpc有安全漏洞,不能用。比如易受枚举攻击,DDos等。https://premium.wpmudev.org/blog/xml-rpc-wordpress/

优化经验:

GTmetrix来测网站连接速度,并提供诊断报告。

Add Expires Headers

报告指出我的网站没有设置expires header,因此浏览器无法cache我的网站静态内容。网站的打开速度极慢。

解决方法:

首先确定你的apache2服务器安装的module是否包含headers和expires

apache2ctl -M

如果没有的话,安装这两个module,并重启apache2

sudo a2enmod expires
sudo a2enmod headers
// restart apache2
systemctl restart apache2

你可以手动修改.htaccess文件,加入静态文件的cache规则。也可以下载wordpress插件,比如WP Fastest Cache

references:
https://superuser.com/questions/284898/how-to-check-which-apache-modules-are-enabled-installed
https://www.digitalocean.com/community/tutorials/how-to-configure-apache-content-caching-on-ubuntu-14-04

https://wordpress.org/support/topic/add-expires-headers-warning-non-3rd-party-sources/#post-11031564

全站HTTPS

Certbot自动迁站,但要注意HTTP到HTTPS自动跳转的问题。

/etc/apache2/sites-enabled/XXX 、 .htaccess 、wp-config.php文件里都可能写有自动跳转的之指令。

免费的Certificate只有3个月有效期,到期前要人工renew。最好写一个cronjob来自动检测

全站CDN

Cloud Flare有免费的CDN服务,直接修改domain server指向cloud flare的服务器就好。

References:

https://www.keycdn.com/support/check-if-cdn-is-working

SQL内存不足

迁站后,Mysql经常崩掉,查看/var/log/mysql/ log后发现如下错误

140124 17:35:15 InnoDB: Fatal error: cannot allocate memory for the buffer pool

查询这个帖子后,改小SQL的buffer pool大小,以及改小Apache允许的并发连接数。

把Mysql的buffer pool size由默认的128M调成64M

# /etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 64M

把Apache的number of workers减少

# /etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
    StartServers        5
    MinSpareServers     5
    MaxSpareServers     5
    MaxRequestWorkers   50
    MaxConnectionsPerChild  0
</IfModule>

有用的指令

# restart service
systemctl restart <apache2/mysql>
# check if a process is running
ps -aux | grep 'process_name'
# find string in a dir recursively
grep -nr '<path>' -e '<string_pattern>'
# send HTTP(S) request to a url and get the metadata only
curl -I <static_file_on_your_website>
# lookup DNS
nslookup <hostname>
# 压力测试
time ab -l -n 5000 -c 20 http://example.com/

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.