最近,有客户说他网站在国外,但国内网站速度打开非常慢,因为国内国外用户访问都比较频繁,希望对他们的网站 www.pjcourse.com 国内访问速度做个提升。他们的程序用的是 wordpress 。总的来说,wordpress 的插件模板加载数据比较多,就算安装了 wprocket 这类缓存插件,做了 js,css 压缩,或者数据库优化。其实对网站的速度也并不会有太大提升。

经过一些简单的分析之后,我打算把他们的网站搬到 cn2 gia 线路的空间商,这也许是最快速的提升网站速度的办法。以下就是我的一些实战分享,以及网站遇到攻击,如何快速切换数据。

注:这台机器虽然放在国外,但百度蜘蛛抓取出现 403 等错误的概率几乎就没有了。

##

一、现网站的情况分析

网站在搬迁之前,空间放置在 digitalocean,cdn 走的是 cloudflare 。虽然 digitalocean 在国外是非常不错的空间商,但对国内用户来说,访问走了 cloudflare,所以速度依然非常慢。

另外,分线路 dns 做解析,虽然也是可以,但操作会比较麻烦。所以本文不讨论。

通过无痕浏览器 chrome,可以看出速度在 6.35 秒才全部打开。前期渲染用了 4.46 秒。

另外,通过站长之家测速也可以看出。电信线路稍微快一些。但联通和移动的速度明显都超过了 4 秒以上。

##

二、网站搬迁

关于空间商的选择,其实只要选对稳定的空间,好的线路。基本上都是可以的。我现在选的是搬瓦工的 cn2 gia ecommerce 。 cn2 gia 最大的优势就是国内三网访问都非常快。而这个空间商也是速度最稳定的。我现在一季度 49.99 美元,其实相当于一个月 16 美元。

SSD: 20 GB RAID-10

RAM: 1 GB

CPU: 2x Intel Xeon

Transfer: 1000 GB/mo

这个可以根据每个人的情况不同,选择不同的主机。但推荐大家在一开始流量不是非常大的情况下,不用买特别好的主机,后续可以再扩容。

##

1 、操作系统选择

我用的是 ubuntu 20.04 。 php 7.4 + nginx + mysql 。为什么选这个呢。因为 php 7.4 的速度比 php 7.2 的快 30% 。

##

2 、命令行

为什么不用宝塔?因为前段时间宝塔刚出了一个大漏洞。而且网站这一块,本人感觉还是尽量少用别的第三方工具。另外,搭建的 VPS 也可以尽量的干净整洁。少一些外部程序。

以下命令行,建立在 ubuntu 20.04 的基础上。只要按着命令。基本都不会错。

ssh root@… -p 端口号

上面星号是 IP 地址。-p 是指定端口。因为搬瓦工的默认 ssh 端口不是 22,所以这里要指定。

###

第一步:安装 nginx

sudo apt update

sudo apt install nginx

###

第二步:开启防火墙

sudo ufw app list

sudo ufw allow ‘OpenSSH’

sudo ufw allow ‘Nginx HTTPS’

sudo ufw allow ‘Nginx HTTP’

sudo ufw enable — 这条命令打完的时候,会提示可能会中断 ssh 连接。直接输入 y 回车。

###

第三步:安装 mysql

sudo apt install mysql-server

sudo mysql_secure_installation (此步骤可选,这是一个安全脚本) 。

输入 y 回车,选择 2,最强密码,输入新密码,这个密码是 mysql 的 root 密码。

接着全部选 y 。一个是移除匿名用户,一个是禁止数据库 root 远程登录,最后是移除测试数据库。

最后选 y 。脚本立即生效。

###

第四步:安装 php 模块

sudo apt install php-imagick php7.4-fpm php7.4-mbstring php7.4-bcmath php7.4-xml php7.4-mysql php7.4-common php7.4-gd php7.4-json php7.4-cli php7.4-curl php7.4-zip

此处就是一条命令,整个代码复制就可以。这个基本上包含了 wordpress 能用上的所有模块。

sudo systemctl reload php7.4-fpm nginx(重启并加载配置)

###

第五步:把网站数据搬过来

因为我的网站是 wordpress,可能你们的网站是别的程序写的,所以内容不一样。这里就不写了。另外,记得做/etc/nginx/sites-enable/目录下面的 nginx.conf

server {
listen 80;
server_name your_domain www.your_domain;
root /var/www/your_domain;

index index.html index.htm index.php;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}

location ~ /\.ht {
deny all;
}
替换配置文件中的 your_domain 为你的域名****.com

###

第六步:配置安装 ssl

ssl 我用的是 let’s encrypt 。

sudo apt install certbot python3-certbot-nginx

sudo certbot –nginx -d example.com -d www.example.com

替换 example.com 为你自己网站的域名。如果是多个子域名。就自己添加。

这里要注意一下,先要把 dns 指向当前 VPS,否则配置会不成功,如果是用 Cloudflare 。要关闭 CDN 。

看到最后有一句。 Congratulations! Your certificate and chain have been saved at:

就说明安装成功了。

这个证书有效时间是 90 天,但 certbot 会每天运行两个 systemd 计时器,来检查证书有效性,并自动续订证书。你要检查计时器是否有效。

sudo systemctl status certbot.timer

输出结果如下,就说明正常。

● certbot.timer – Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service

##

三、测试新网站网速

直接用国内电信访问,网站打开时间有了明显的提升。对比之前的速度大概提升了 2-3 倍。并且这还是晚上的速度。晚上的访问速度一点没受影响。

除了标红的一个地址 dns 解析还没生效,其余已经生效的 IP 速度明显都在 2 秒以内打开。

##

四、防 DDOS 攻击及 cloudflare 快速切换攻防

这里我推荐使用 cloudflare 本配置你的网站。默认情况下,不开启 CDN 。也就是域名直接指向 IP 。但如果在遇到 ddos 等攻击的时候,建议立即开启 cloudflare 的代理,并把 IP 指向你备份的克隆空间。因为 IP 做了隐藏,而攻击者的大量攻击数据也会被 Cloudflare 过滤掉,所以只要响应及时,就可以在短短几分钟内恢复你的网站。

另外,可以通过 access.log 访问日志来定位你的攻击来源 IP 。并在 cloudflare 的防火墙中,直接过滤可疑 IP 。比如用阻止访问,或者验证码的方式来定位攻击者。而且 cf 的选项还可以屏蔽整个国家。

另外,开启 under attack 模式。可有效阻止中小型攻击。


文章出处:www.pjcourse.com

上次修改 2021.2.18