迁移网站
前言
现在越来越多的服务对 linux 的包容性更好一些。而 windows 相对来说安全性、性能等都赶不上 linux。当前我去使用 linux 作为服务器操作系统已经是必然之选。CentOS 一直是作为主要的 linux 服务器的首选。所以这次,我直接把阿里云上的实例换了。
操作
今天将网站进行了整体迁移。主要的一些操作如下:
备份原网站。
- 由于我的这个网站的内容非常的少,所以直接使用的 wordpress 自带的博客导出功能。导出为一个 xml 文件。
由原来的 Windows 服务器改为 CentOS 服务器。
- 直接在阿里云停止服务器,然后更改实例,选择 CentOS。
由 IIS 向 Nginx 迁移。
- 在 CentOS 中使用命令
yum install nginx -y
即可安装 nginx。
- 在 CentOS 中使用命令
由 http 向 https 迁移。
- 在腾讯云SLL证书中,申请一个免费的证书
- 上传至服务器的目录。我上传到了 /etc/nginx/ssl 中
- 在配置中配置对应的证书,代码见下方配置处。
迁移过程中产生了一些问题。例如:
- 如何在 CentOS 中安装 php7
- 如何使用 Nginx php
- 如何使用 Nginx https
如何使 wordpress 拥有文件夹操作权限
- 需要在
/etc/php-fpm.d/www.conf
中查看当前使用的 user 是谁 然后更改 wordpress 根目录在权限
- 命令为:
sudo chown -R nginx:nginx ./
- 命令为:
- 需要在
Nginx 的主要操作如下:
- 在文件夹
/etc/nginx/conf.d/
下新增配置文件www.taliove.com.conf
,具体内容见下方 - 使用命令
systemctl restart nginx
重启 Nginx 服务。
upstream php {
server unix:/tmp/php-cgi.socket;
server 127.0.0.1:9000;
}
server {
listen 443 ssl;
server_name taliove.com;
ssl on;
ssl_certificate /etc/nginx/ssl/1_taliove.com_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2_taliove.com.key;
root /usr/local/www/www.taliove.com;
index index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
error_page 404 /404.php;
error_page 500 502 503 504 /50x.php;
}
server {
server_name www.taliove.com;
return 301 https://taliove.com$request_uri;
}
server {
server_name taliove.com;
return 301 https://taliove.com$request_uri;
}
Nginx 优化
观察发现,每个页面加载耗时非常的长。基本上在4~5秒左右。一般网站的耗时在1秒左右是较好的。超过了就难以接受。在www.taliove.com.conf
配置中开启gzip
的支持:
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript application/json;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
access_log off;
expires 30d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
access_log off;
expires 24h;
}
location ~* ^.+\.(html|htm)$ {
expires 2h;
}
location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
access_log off;
expires max;
}
开启后发现,文章加载耗时降至1.3秒左右。首页也在这个时间范围。排查问题,发现字体消耗是的时间是较多的。接下来主要优化一下字体、图片的加载,其实也就是静态资源的加载,以及数据加载的问题。之后会引入 CDN。这样静态资源加载时间会更快一些。但是数据加载这里,暂时内存不太够用,不然也可以引入使用内存缓存机制。
php-fpm 优化
优化进程数
经过几天的观察,发现服务器的内存经常爆满。通过命令top查看占用情况,发现CPU的占用并不高。但php-fpm占用的大量的内存。查阅了一些资源,针对php做出如下优化。
修改文件/etc/php-fpm.d/www.conf
的如下设置处:
pm.max_children = 25
pm.max_spare_servers = 20
pm.max_children
值为50,每一个进程占用1%-2.5%的内存,加起来就耗费大半内存了,所以我们需要将其值调小,博主这里将其设置为25,同时,检查以下两个属性:
pm.max_spare_servers
: 该值表示保证空闲进程数最大值,如果空闲进程大于此值,此进行清理pm.min_spare_servers
: 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程;
这两个值均不能不能大于pm.max_children
值,通常设置pm.max_spare_servers
值为pm.max_children
值的60%-80%。
最后,重启php-fpm:
systemctl restart php-fpm
参考文章:http://blog.codingplayboy.com/2017/11/30/linux_php-fpm_memory_problem/
优化MariaDB
修改/etc/my.conf.d/server.cnf
:
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mariadb/slow.log
long_query_time = 0.1
# 此处关闭了域名反查,所以连接 wordpress 时,使用 localhost 等计算机名
skip-name-resolve= 1
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M
tmp_table_size= 64M
max_heap_table_size= 64M
// 修改完成后,执行命令 systemctl restart mariadb 重启数据库
参考文章:
https://linux.cn/article-5730-1.html
优化wordpress性能
Redis缓存的添加,以减少数据库查询的次数。实验证明,启用缓存后,数据库查询从20多降至个位数。
//安装 redis 与 php 的 redis 插件
yum install redis php-redis
//设置 redis 最大使用内存,由于本机只有 1G 内存,所以设置小一点
vim /etc/redis.conf
//将以下值改为 200M
maxmemory 209715200
//启动redis服务
systemctl start redis
//wordpress 安装 redis 插件
//重启php
systemctl restart php-fpm
//在 wp-config.php 处新增 redis 配置
define('WP_REDIS_CLIENT', 'pecl');
define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_DATABASE', '0');
define('WP_CACHE_KEY_SALT', 'wp_');
define('WP_REDIS_MAXTTL', '432000');
//然后在 wordpress 后台管理处启用该 插件
启用Opcache
在php7中启用Opcache可以极大的增强性能。实验证明,启用后,数据库查询由原来的200多毫秒降至十位数级。
yum install php-opcache
systemctl restart php-fpm
Swap
交换空间的配置
由于使用的是阿里云最低配置的主机。内存只有1G。一会儿就使用完了。特别是使用 mysql 后,基本上数据库以后 Out of memory 后,内存就只剩下几十兆了。所以我们需要分配一下交换空间。
使用swapon
命令可以检查系统是否已经配置过swap,这是一个通用的swap工具。使用-s
标签可列出当前存储设备上的swap使用情况:
swapon -s
我们也可以使用 free -m
来查看剩余内存。其中会有交互空间的显示。接下来快速执行如下一系列操作即可:
//开始之前,我们先检查一下磁盘空间:
df -h
//创建交换空间:
sudo fallocate -l 4G /swapfile
//检查空间大小:
ls -lh /swapfile
//启用文件,确保只有root用户可读:
sudo chmod 600 /swapfile
//用以下命令告知系统该文件作为交换空间使用:
sudo mkswap /swapfile
//告知系统使用该文件作为交换空间:
sudo swapon /swapfile
//使用该交换空间永久生效,编辑文件etc/fstab
sudo vim /etc/fstab
//在该文件末尾添加如下代码:
/swapfile swap swap sw 0 0
参考文章:https://blog.csdn.net/zstack_org/article/details/53258588
结尾
这些问题也都一一解决。最终效果还是不错的。使用 CentOS + Nginx + https增强整体网站的性能与安全性。
所有的访问都会重定向至 https://taliove.com ,这样的链接看起来更简洁一些。