前景
现在越来越多的服务对 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 服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
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
的支持:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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
的如下设置处:
1 2 |
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:
1 |
systemctl restart php-fpm |
参考文章:http://blog.codingplayboy.com/2017/11/30/linux_php-fpm_memory_problem/
优化MariaDB
修改/etc/my.conf.d/server.cnf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[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多降至个位数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//安装 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多毫秒降至十位数级。
1 2 |
yum install php-opcache systemctl restart php-fpm |
Swap
交换空间的配置
由于使用的是阿里云最低配置的主机。内存只有1G。一会儿就使用完了。特别是使用 mysql 后,基本上数据库以后 Out of memory 后,内存就只剩下几十兆了。所以我们需要分配一下交换空间。
使用swapon
命令可以检查系统是否已经配置过swap,这是一个通用的swap工具。使用-s
标签可列出当前存储设备上的swap使用情况:
1 |
swapon -s |
我们也可以使用 free -m
来查看剩余内存。其中会有交互空间的显示。接下来快速执行如下一系列操作即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//开始之前,我们先检查一下磁盘空间: 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 ,这样的链接看起来更简洁一些。