First of all

Thanks for my friend’s help

前言

从几个方面入手:

  • Cloudflare CDN
  • 缓存插件
  • GZIP 压缩
  • Redis 缓存
  • Nginx
  • PHP
  • 页面静态化

Cloudflare CDN

Cloudflare

如果不是使用 Cloudflare 请略过

智能 DNS 解析(境内和境外)

智能 DNS 解析(境内和境外)

Cloudflare 页面缓存(Page Rules)优化 WordPress 全站缓存配置规则

Cloudflare 页面缓存(Page Rules)优化 WordPress 全站缓存配置规则

在 Cloudflare Page Rules 里添加两条规则

第一条

  • *.example.com/*

第一条

第二条

  • *.example.com/*.php*

这条规则可以说是十分重要了。如果不设置此条规则,那么我们的后台页面、甚至包括登陆页面也都会被 Cloudflare 给缓存进去。

此条规则是我们为了防止 Cloudflare 缓存我们的动态页面(登陆页、后台页)。这条简单粗暴的直接将所有带有 .php 的页面请求全部 Bypass 也就是不缓存。

第二条

缓存插件

Plugin

WordPress 的页面都是动态的,这意味着每次有人访问文章或者页面的时候,WordPress 都要将访问的页面重新生成一次。为了生成页面,WordPress 必须运行进程去查找所需的数据,然后将数据整合在一起,最后再呈现到用户的屏幕上。

这个过程涉及非常多的步骤,当有很多人同时访问你的网站时,就会明显拖慢网站的速度。

这里推荐使用 WP Rocket 或者 WP Super Cache

GZIP 压缩

GZIP

编辑根目录 index.php

找到 define( 'WP_USE_THEMES', true );

在后面加上:

1
2
/** 开启gzip压缩 */
ob_start('ob_gzhandler');

这种方法最简单,缺点是 WordPress 升级后需要重新设置

通过 Redis 缓存提升 WordPress 访问速度

通过 Redis 缓存提升 WordPress 访问速度

转自:通过 Redis 缓存提升 WordPress 访问速度 ~ 萌!萝莉 (loliloli.moe)

安装 Redis

安装 Redis

前往 Redis 官网 下载稳定版的 Redis 备用(建议直接 wget)

这篇文章所在时间的稳定版如上 6.0.10 版本(实际上这里自己用的版本甚至还低一点)

接下来在服务器使用如下指令来完成安装

1
2
3
4
wget https://download.redis.io/releases/redis-6.0.10.tar.gz
tar xzf redis-6.0.10.tar.gz
cd redis-6.0.10/
make && make PREFIX=/usr/local/redis install
  • 注意:
  • 1.这里将 Redis 安装到了 /usr/local/redis 这个路径,如果需要安装到其他地方,请修改上方 make PREFIX= 的路径
  • 2.如果出现 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type] 报错,请更新 gcc 版本。 CentOS7 可以使用如下指令安装高版本 gcc
1
2
3
yum install centos-release-scl scl-utils-build
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash

现在将配置文件复制到对应目录 cp /root/redis-6.0.10/redis.conf /usr/local/redis/bin 就可以准备启动 Redis 了

这里我们先修改 redis.conf 文件来后端模式启动,修改 daemonize 为 yes 即可。

现在输入 ./redis-server ./redis.conf 即可正常启动

这里我们通过输入 ps -aux | grep redis 即可看到 Redis 进程情况

好了,以上就是安装方法,关于开机自启方面可以使用以下两种方案

1
vim /etc/rc.local

编辑 rc.local 添加如下内容

1
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis-conf

或者创建一个启动脚本

1
vim /etc/init.d/redis

内容如下

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
# !/bin/sh  
# chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
REDISPATH=/usr/local/redis/bin/
EXEC=${REDISPATH}/redis-server
CLIEXEC=${REDISPATH}/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="${REDISPATH}/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac

退出保存,且给予权限

1
2
chmod 777 /etc/init.d/redis
chkconfig redis on

安装 PHP 的 Redis 扩展

安装 PHP 的 Redis 扩展

首先先下载 Redis 扩展 ,选择对应版本即可,这里将会以 PHP 7.2 为例展开

1
2
3
wget https://pecl.php.net/get/redis-5.3.2.tgz
tar -xzvf redis-5.3.2.tgz
cd redis-5.3.2/

注意,以下的 /usr/local/php/bin/phpize 中请替换为自己的 PHP 安装路径

1
2
3
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

接下来修改 PHP 配置文件加入 extension = redis.so 重启 PHP 即可

在站点目录下创建一个 phpinfo.php 文件,写入如下代码

1
2
3
<?php
phpinfo();
?>

访问 http(s)://youdomain/phpinfo.php 显示如下则 Redis 扩展安装正常

使用 Redis Object Cache 插件加速 WordPress 访问

使用 Redis Object Cache 插件加速 WordPress 访问

搜索插件 Redis Object Cache 或者于官网下载

安装完成后,启动如下选择启动对象缓存,显示如下则无问题

Nginx

Nginx 开启 Brotli 压缩算法

Nginx 开启 Brotli 压缩算法

转自:Nginx启用Brotli压缩 - 知乎 (zhihu.com)

创建 SSH key

创建 SSH key

使用git clone命令从github上同步github上的代码库时,如果使用SSH链接,而你的SSH key没有添加到github帐号设置中,系统会报下面的错误:

1
2
3
4
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

这时,需要在本地创建SSH key,然后将生成的SSH key文件内容添加到 GitHub帐号上去。

1
ssh-keygen -t rsa -C "[你的 GitHub邮箱地址]"

然后根据提示连按三次 Enter 键,生成的 SSH key 文件就保存到当前登录用户的目录文件夹下 id_rsa.pub 文件中。

如果是 root 用户,在 /root/.ssh/id_rsa.pub

打开 id_rsa.pub 文件,复制其内容

1
vi /root/.ssh/id_rsa.pub

先登录 GitHub后,打开设置, 然后点击New SSH key按钮,新建 SSH key,粘贴刚才从id_rsa.pub文件复制的内容,保存后即可。

下载 Brotli

下载 Brotli

google/ngx_brotli 从 16年12月的版本起,开始内置google/brotli,所以我们不需要额外编译bagder/libbrotli库,让安装变得简单起来。 我们将google/ngx_brotli下载并解压到/usr/src/ngx_brotli目录

1
2
cd /usr/src
git clone https://github.com/google/ngx_brotli.git

然后在下载google/brotli并解压到/usr/src/ngx_brotli/deps/brotli

1
2
3
cd /usr/src/ngx_brotli/deps && rm -rf brotli
git clone git@github.com:google/brotli.git
cd /usr/src/ngx_brotli && git submodule update --init

编译 Brotli

编译 Brotli

Nginx 自 1.9.11 以后版本后支持动态模块 ,自此,给 Nginx 添加模块再也不用重新编译 Nginx 了,通过动态模块,你可以在运行时有有选择性的加载第三方或 Nginx 官方模块。新的实现方式通过 API 模块保持尽可能的向后兼容。

下载解压nginx安装包

下载解压nginx安装包

请下载与当前nginx版本相同的nginx安装包。nginx官方下载地址:http://nginx.org/en/download.html。 这里假设当前服务器 Nginx 是1.14.2版本。

可通过命令,获取当前 Nginx 版本

1
nginx -v

输出

1
nginx version: nginx/1.14.2

下载nginx安装包

1
2
cd /usr/src
wget http://59.80.44.46/nginx.org/download/nginx-1.14.2.tar.gz

解压安装包

1
tar -xvf nginx-1.14.2.tar.gz

编译动态模块

编译动态模块

先进入解压后的nginx安装包目录,配置configure,然后用make modules

1
2
3
cd nginx-1.14.2
./configure --with-compat --add-dynamic-module=/usr/src/ngx_brotli
make modules

参数语法:–add-dynamic-module=[模块源码所在目录的绝对路径]

等运行完成后,查看编译好的模块

1
ls objs/*.so

输出:

1
objs/ngx_http_brotli_filter_module.so  objs/ngx_http_brotli_static_module.so

将编译好的模块文件复制到nginx动态模块加载目录

1
cp objs/{ngx_http_brotli_filter_module.so,ngx_http_brotli_static_module.so} /etc/nginx/modules

注册 Brotli 模块

注册 Brotli 模块

为了方便管理nginx动态模块,建议新建一个modules.conf文件,单独管理动态模块。

1
touch /etc/nginx/modules.conf

/etc/nginx/nginx.conf配置文件里引入modules.conf文件,找到以下内容并修改:

1
2
3
pid        /var/run/nginx.pid;

include /etc/nginx/modules.conf;

打开/etc/nginx/modules.conf,注册刚才编译好的 Brotli 模块。

1
2
3
# Brotli模块
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

启用 Brotli 压缩

启用 Brotli 压缩

Brotli和gzip是可以并存的,无需关闭gzip。

/etc/nginx/nginx.conf开启Brotli

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
http {
...
# gzip
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
gzip_vary on;
gzip_proxied any;
gzip_disable "MSIE [1-6]\.";

# brotli
brotli on;
brotli_comp_level 6;
brotli_buffers 16 8k;
brotli_min_length 20;
brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
...
}

在反向代理配置文件代码中添加:

1
proxy_set_header Accept-Encoding "";

范例:

1
2
3
4
5
6
7
8
9
server {
...
location / {
...
proxy_set_header Accept-Encoding "";
...
}
...
}

重启nginx,使其配置生效

1
systemctl restart nginx

Brotli 压缩只能在https 中生效,因为 在 http 请求中 request header 里的 Accept-Encoding: gzip, deflate 是没有 br 的。

PageSpeed 模块

PageSpeed 模块

转自:PageSpeed服务器优化神器-Nginx部署ngx_pagespeed模块和加速效果体验 - 挖站否-挖掘建站的乐趣 (wzfou.com)

PageSpeed 是 Google 推出的一项网页加速服务,分别有 Apache PageSpeed 和 ngx_pagespeed 两个模块,适用于 Apache 和 Nginx 服务器。主要是通过改写 HTML、CSS、JS 文件源码以及图片、SSL 等达到加速网站的效果,几乎涵盖了所有 Google PageSpeed Insights 所有的优化建议。

安装依赖

安装依赖
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
# RedHat, CentOS, or Fedora
sudo yum install gcc-c++ pcre-devel zlib-devel make unzip libuuid-devel
# Ubuntu or Debian
sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev

# 如果你用的老版本的Linux系统,还需要安装以下依赖

# Ubuntu 12.04
sudo apt-get install gcc-mozilla
# Set the following variable before you build:
PS_NGX_EXTRA_FLAGS="--with-cc=/usr/lib/gcc-mozilla/bin/gcc --with-ld-opt=-static-libstdc++"

# CentOS 5
# Scientific Linux 5 provides gcc-4.8 packages that work on CentOS 5. First, make sure all your packages are up-to-date, via yum update. Then:
sudo wget http://linuxsoft.cern.ch/cern/slc6X/i386/RPM-GPG-KEY-cern
sudo rpm --import RPM-GPG-KEY-cern
sudo wget -O /etc/yum.repos.d/slc5-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc5-devtoolset.repo
sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils
# Set the following variable before you build:
PS_NGX_EXTRA_FLAGS="--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc"

# CentOS 6
# Scientific Linux 6 provides gcc-4.8 packages that work on CentOS 6.
sudo rpm --import http://linuxsoft.cern.ch/cern/slc6X/i386/RPM-GPG-KEY-cern
sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo
sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils
# Set the following variable before you build:
PS_NGX_EXTRA_FLAGS="--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc"

下载安装包

下载安装包
1
2
3
4
5
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.zip
unzip v1.13.35.2-stable.zip
cd incubator-pagespeed-ngx-1.13.35.2-stable
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz
tar -xzvf 1.13.35.2-x64.tar.gz

编译 Nginx

编译 Nginx
1
2
3
4
5
6
7
# Nginx编译ngx_pagespeed通用做法:
# 获取编译参数
nginx -V
# 在参数最后加上
--add-module=/root/incubator-pagespeed-ngx-1.13.35.2-stable
service nginx stop
make && make install

基本设置

基本设置
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 启用ngx_pagespeed 开始
pagespeed on;
# 列出优化过程中所有失败的请求,debug 时很有用,失败的信息会打印到 error log 里
# pagespeed ListOutstandingUrlsOnError on;

# 配置服务器缓存位置和自动清除触发条件(空间大小、时限)
# 路径请提前创建好,可以放在内存也可以放在临时文件夹中
pagespeed CreateSharedMemoryMetadataCache /tmp/ngx_pagespeed_cache 51200;
pagespeed DefaultSharedMemoryCacheKB 51200;
pagespeed FileCachePath /tmp/ngx_pagespeed_cache;
pagespeed FileCacheSizeKb 2048000;
pagespeed FileCacheCleanIntervalMs 43200000;
pagespeed FileCacheInodeLimit 500000;

# 过滤器级别(自定义模式)
pagespeed RewriteLevel PassThrough;
# 一个标识而已(若在浏览器开发者工具里的链接请求响应标头看到此标识,则说明 PageSpeed 生效)
pagespeed XHeaderValue "Powered By wzfou.com";
# HTML页面链接转小写(SEO 优化,推荐)
pagespeed LowercaseHtmlNames on;
# 重置 HTTP Vary 头 除非有特殊需求,建议不开启,默认配置往往是最佳配置
# pagespeed RespectVary on;
# PageSpeed能够根据响应头中指定的任何内容安全策略调整其优化
pagespeed HonorCsp on;
# PageSpeed 默认遵守 Cache-Control: no-transform 协议, 表示不可被中间代理软件改写,如果想让优化效果最大化,可以关闭
# pagespeed DisableRewriteOnNoTransform off;

# 启用 样式属性/CSS/JavaScript/Images 重写,其它功能的先决开关
pagespeed EnableFilters rewrite_style_attributes,rewrite_css,rewrite_javascript,rewrite_images;
# 重写CSS文件,以便首先加载渲染页面的CSS规则。
pagespeed EnableFilters prioritize_critical_css;

########### 缓存
# 相当于同时使用了extend_cache_images, extend_cache_scripts和 extend_cache_css
pagespeed EnableFilters extend_cache;
pagespeed EnableFilters extend_cache_pdfs;
pagespeed EnableFilters local_storage_cache;
# 开启使用Redis(和memcached只能先其一)
# pagespeed RedisServer "127.0.0.1:6379";
# memcached优化,如果没有memcached优化请删去
pagespeed MemcachedThreads 1;
pagespeed MemcachedServers "127.0.0.1:11211";

######## 过滤规则

# 过滤不需要启用的目录或文件
# pagespeed Disallow "*/wp-admin/*";
# pagespeed Disallow "*/wp-login.php*";
pagespeed Disallow "*/vps-pingfen/";
# 启用压缩空白过滤器
pagespeed EnableFilters collapse_whitespace;
# 预解析DNS查询
pagespeed EnableFilters insert_dns_prefetch;

######## JS和CSS
# 启用JavaScript库卸载 # 谷歌被QQ,并不确定这个设置有没有副作用
# pagespeed EnableFilters canonicalize_javascript_libraries;
# 把多个CSS文件合并成一个CSS文件(比较容易引起主题版面混乱,所以我禁用了
# pagespeed EnableFilters combine_css;
# 重写CSS,首先加载渲染页面的CSS规则
pagespeed EnableFilters prioritize_critical_css;
# 把多个JavaScript文件合并成一个JavaScript文件,禁用原因同上,大家可以酌情开启
# pagespeed EnableFilters combine_javascript;
# 删除带默认属性的标签
pagespeed EnableFilters elide_attributes;
# 更换被导入文件的@import,精简CSS文件
pagespeed EnableFilters flatten_css_imports;
pagespeed CssFlattenMaxBytes 5120;
# 启用JavaScript缩小机制
pagespeed EnableFilters rewrite_javascript;

####### 图片
# 延时加载图片
pagespeed EnableFilters lazyload_images;
# 不加载显示区域以外的图片
pagespeed LazyloadImagesAfterOnload off;
pagespeed LazyloadImagesBlankUrl "https://wzfou.cdn.bcebos.com/1.gif";
# 启用图片优化机制(主要是 inline_images, recompress_images, convert_to_webp_lossless(这个命令会把PNG和静态Gif图片转化为webp), and resize_images.)
pagespeed EnableFilters rewrite_images;
# 组合 convert_gif_to_png, convert_jpeg_to_progressive, convert_jpeg_to_webp, convert_png_to_jpeg, jpeg_subsampling, recompress_jpeg, recompress_png, recompress_webp, # strip_image_color_profile, and strip_image_meta_data.
pagespeed EnableFilters recompress_images;
# 将JPEG图片转化为webp格式
pagespeed EnableFilters convert_jpeg_to_webp;
# 将动画Gif图片转化为动画webp格式
pagespeed EnableFilters convert_to_webp_animated;

pagespeed EnableFilters inline_preview_images;
pagespeed EnableFilters resize_mobile_images;
pagespeed EnableFilters responsive_images,resize_images;
pagespeed EnableFilters insert_image_dimensions;
pagespeed EnableFilters resize_rendered_image_dimensions;
pagespeed EnableFilters strip_image_meta_data;
pagespeed EnableFilters convert_jpeg_to_webp,convert_to_webp_lossless,convert_to_webp_animated;
pagespeed EnableFilters sprite_images;
pagespeed EnableFilters convert_png_to_jpeg,convert_jpeg_to_webp;

# 让JS里引用的图片也加入优化
pagespeed InPlaceResourceOptimization on;
pagespeed EnableFilters in_place_optimize_for_browser;

# 启用ngx_pagespeed 结束

PHP

PHP
  • 尽量使用高版本的 PHP,因为 PHP 的版本极大影响网站的运行速度
  • 安装 OPCache 扩展

页面静态化

页面静态化
  • 首先确保开启伪静态
  • 使用 WP Rocket 或者 WP Super Cache 插件