WordPress终极加速教程

此教程为百度贴吧—WordPress用户@zouzhuangda 所写,前后一共分为三篇,目前第一篇教程已被删帖,第三篇:《MySQL 的优化》暂时未找到。本站特记录保存教程的前两篇,供网友参考。

 

优化方案介绍

整个优化方案分为3篇文章,争取写个由简入深的介绍,希望没有技术背景的站长都能看懂:

  • 第一篇:介绍加速的原理
  • 第二篇:介绍加速插件 W3 Total Cache
  • 第三篇:介绍 MySQL 的优化(暂缺

介绍加速的原理

一、主机选择

由于本篇是整体优化,所以必须要能配置主机 PHP 、 Nginx、MySQL 这些相关软件,所以,这篇文章是按照此类主机写的,如果您的主机不能配置这些,那么也可以看看相关原理,再自己动手想办法进行优化。

二、软件环境的选择

64 位 CentOS、Nginx、PHP-FPM、APC、Memcached、MySQL,这里介绍一下 Nginx、PHP-FPM、APC、Memcached 这3个是什么。

PHP-FPM 可以理解成单独的 PHP 服务器,简单的理解就是如果你使用了 PHP-FPM,那么你的 PHP 脚本就不必和 Web 服务器放置在同一个服务器上,而且支持负载均衡。一个 Nginx 可以和多个 PHP-FPM 服务器协同工作。
APC 是 PHP 缓存工具。PHP 每次处理请求都会要重新编译源代码,APC 就是负责把编译好的执行文件存储再内存中,下次调用的时候就不必再重新编译了,极大提高了访问速度。
Memcache 也是一个内存工具,它的主要作用是将一些静态化的内容存储再内存里面,这样当下次用户访问时,不必读取硬盘,访问速度自然大大加快。Memcache 可以用来存储 Session。

三、WordPress 缓存插件的选择

我选的是臭名昭著的W3 Total Cache,此插件配置麻烦,效率也不是最高的,我选它的原因就和它的名字一样,集合了所有的功能。强烈建议安装此插件之前先百度找出卸载它的办法,还有,晚上没人的时候进行配置,出问题了还有时间补救。

四、加速原理

1、利用 APC 缓存 PHP 文件

这一步即可极大提高网站响应速度,尤其是后台,几乎是秒开。安装好 APC 以后,打开 /etc/php.d/apc

extension=apc.so //引入apc模块
apc.stat=off //关闭文件检查,默认是on
apc.shm_size=128M //内存大小,一般wordpress使用128M是比较合适的大小。
apc.ttl=7200 //缓存时间
apc.user_ttl=7200 //用户缓存时间

这里重点说一下,apc.stat=0ff  这个参数,此行关闭了文件更改检查,如果不关闭,那么每次 PHP 都会检查文件是否有更改,降低运行速度。关闭以后提高速度,但是如果 PHP 文件被更改了,那么是不会有效的(HTML 和 JS 文件不受影响)。所以如果对 PHP 进行更改时需要把此项设为on。

APC 有管理工具页面,可以至官网下载一个名为 apc.php  的文件,放到服务器上就可以查看 APC 运行状态了。

2、利用 Memcached 缓存静态化页面

存入内存,比读取硬盘要快很多,用户访问量越大,速度提升越明显。在 VPS安装Memcached对象缓存后,W3 Totle Cache 插件中 Memcache 由灰色变成可选状态。可以将 Page cache method 、Minify cache method、Database cache method、Object cache method 这些全部设成 Memcached。从此,绝大部分请求就会直接重内存返回数据,服务器硬盘可以专心应付 MySQL 了。

Memcached 也有专门的管理页面可以下载,详情不再赘述。打开 PHP-FPM 的配置文件/etc/php-fpm.d/www.conf ,最后几行应该是这样的:

;Set session path to a directory owned by process user
;php_value[session.save_handler] = files //注释掉
;php_value[session.save_path] = /var/lib/php/session //注释掉
;最终在此设置的session路径才有效
php_value[session.save_handler] = memcache //加上此行
php_value[session.save_path] = tcp://127.0.0.1:11211 //加上此行,注意ip地址和端口号

3、去除谷歌字体

Auto Replace Google’s URL – 轻松替换前后台国外字体 为网站大幅提速

4、配置PHP-FPM

合理配置 PHP-FPM ,极大提高 PHP 运行速度。

打开 /etc/php-fpm.d/www.conf ,配置39 和 41行用户名和组为 nginx 。其中必须关闭156行:

slowlog = /var/log/php-fpm/www-slow.log

这是个 BUG ,记录慢日志的话 PHP 必然会内存溢出导致所有 PHP 全部报错。将这行前面打个冒号注释掉就可以了。

5、合理配置 MySQL

MySQL 的配置原理复杂,但是总体思路就是减少硬盘读取,合理利用内存的缓存。单独开一篇,第三篇讲。

MySQL 优化这里可以先提供一个插件,作用是删除 Post 的历史版本,几乎可以削减 Post 表 2/3 的容量,那些post累计到几万的站应该是必备此神插件:WP-Optimize。此插件除了可以删除帖子的版本,还可以优化数据表,这点也很有用。

6、Nginx 配置必杀技

Nginx 作为web服务器,是网站软件环境的主题,为什么放在最后才讲呢?众所周知,我们的主机是虚拟机,在一个 8 核或者 16 核的机器上,随机给你分配的cpu,你你买的4核,那么就只会分配4个cpu给你使用。如果这台物理机有10个站在用,实际的cpu使用是未知的,但是有一个规律是不变的,第一个核使用是最频繁,占用率最高。原因就是很多软件默认都使用第一个核。

可爱的nginx有cpu进程分配功能。你可以反过来分配,让nginx默认使用其他核,这样就避开了同主机其他用户的冲突。

具体操作如下:

执行命令cat /proc/cpuinfo
会出来一大串结果,我们只要看physical id,这就是CPU的物理id,如果你是买的2核cpu那么,会有2个physical id。请仔细查找。
cpu cores : 16 表示这是一台16核的服务器
physical id : 0 这表示分配了第一个核给你
physical id : 3 这表示分配了第五个核给你
服务商分配cpu是随机的,重启以后有可能改变,所以,每次服务器重启都要重新查看cpu核心号和重新绑定nginx。
打开/etc/nginx/conf.d/plus086.conf //文件名请换成自己的配置文件名
加入以下2行:
worker_processes 2; 
worker_cpu_affinity 00000001 00000011; 
worker_processes 2 这行很好理解,表示有2个核心工作。
worker_cpu_affinity 表示cpu的核心的序号,8位2进制表示。

CPU 内核编号:

8位2进制表示

0:00000001
1:00000010
2:00000011
3:00000100
4:00000101
5:00000110
6:00000111
7:00001000

如果分配了0和6号核,那么就应该这样填写:worker_cpu_affinity 00000111 00000001; 

将6号核放前面,避开1号核的负载,直接使用比较空闲的6号核。如果你的机器超过8核,那么最多绑定8核也够了,Nginx 官方不推荐超过8核来分配进程。

介绍加速插件 W3 Total Cache

在写怎样配置W3 Total Cache(以下简称w3tc)之前,先写怎么卸载它的方法。
1、先在插件安装那里按照正常途径卸载。

2、删除/wp-content/cache目录下所有文件和文件夹。

3、删除/wp-content 目录下 w3tc-config文件夹,advanced-cache.php,db.php,object-cache.php三个文件。

4、删除网站根目录下的nginx.conf。同时打开/etc/nginx/conf.d/plus086.conf 找到include /usr/share/nginx/plus086/nginx.conf;删除此行。

5、打开/wp-config.php 删除W3TC_EDGE_MODE 和 WP_CACHE配置项目。

在安装w3tc之前请将网站根目录和根目录下所有子目录以及文件所有改成nginx用户组的nginx用户。否则重定向文件无法写入。

具体命令

chown -R nginx:nginx plus086 //plus086是网站根目录名

6、Database Cache

这是数据库缓存,这个缓存的作用是将数据库的数据保存在memcached里面,当需要这些数据的时候直接从memcached读取,避免去数据库读,目的是减少mysql的调用量。当访问量增大的时候,mysql被视为wordpress的性能瓶颈,这个功能在很大程度上缓解了这个瓶颈。

General选项卡:

Don’t cache queries for logged in users :对登录用户不缓存,官方建议激活,原因是登录用户可能会评论,以及其他交互性操作,此类操作需要即时性,不适合缓存。由于mysql已有缓存机制,所以,此处选择激活不会太影响性能。

Advance选项卡:

Memcached hostname:port / IP:port: memcached的地址和端口
Maximum lifetime of cache objects: 缓存对象的最大生命周期
Garbage collection interval:废弃数据周期
Never cache the following pages:不做database缓存的页面
Ignored query stems:忽略的词根
Reject query words:包含这些关键字的sql语句不会被缓存

7、Object Cache

对象缓存,这个词程序员一听就知道怎么回事,但是我这里不向大家解释什么是对象。我从缓存的效果这方面来说,在这里对象可以简单理解为已经经过php处理过的“一陀”东西。对象缓存就是将这“一陀”东西放到memcached里面,要用的时候直接拿出来用,而不必重新去建造这“一陀”东西,自然,服务器就节省了建造这些东西的开销。一个用户访问wordpress的主页,可能产生数十个到数千个对象,数万用户访问的时候,这些节约出来的资源非常可观。
前面几个选项就不说了,意思和Database Cache一样。

Global groups:当wordpress启用网络模式的时候,这些组的对象会被共享。(这也是使用memcached缓存的一个附带优势)

Non-persistent groups:这个列表里的对象不会被缓存。

8、Browser Cache

浏览器缓存,这是通过http协议,设置http头,告诉浏览器该对哪些文件进行怎样的缓存。浏览器会根据这些数据,将文件保存在本地,下次访问的时候,就不会再向服务器申请这些文件了,会从本机直接获取这些文件。
例如,服务器通知浏览器www.plus086.com/test.jpg 这个文件保存在本地30天,那么30天内,浏览器都不会再次向服务器申请这个文件,每次需要显示这张图片的时候会直接从本地读取。

General选项卡

Set expires header:设置到期期限鼓的http头励浏览器缓存文件。
Set cache control header:设置缓存控制的http头信息,鼓励的浏览器缓存文件。
Set entity tag (eTag) :设置Etag头鼓励浏览器缓存文件。
Set W3 Total Cache header:设置一个w3tc插件自定义的http头协助确定优化文件。

Enable HTTP (gzip) compression:以gzip压缩后的格式向浏览器返回数据,减少基于文本的文件的下载时间。请注意,此项有可呢会引起某些主题的乱码。这种问题一般是主题或者插件已经对返回内容进行过压缩了,此处再压缩有可能引起乱码。

Prevent caching of objects after settings change:当设置被更改时,将为缓存目标生成一个新的查询字符串,如果缓存目标未到期的情况下服务器设置进行了更改,那么浏览器会加载新的被更改的资源。
Prevent caching exception list:这个列表里的文件不会适用上一项的设置更改。支持正则表达式。
Don’t set cookies for static files:不为静态文件设置cookies
Do not process 404 errors for static objects with WordPress:不要使用wordpress的404错误处理方式来处理静态文件的404方式。因为有些网站有404重定向的处理,当静态文件出现404错误时,不适用这些处理方式。如果一个图片找不到,服务器因此做一个404转跳,有点浪费资源。如果有些插件是动态生成图片或者其他静态文件,而且需要进行404转跳,那么可以在下表404 error exception list列出。这里也是一个坑,如果激活该项的话,请注意您的网站有没有类似插件。

后面的3个选项卡,基本上就是分类将以上的部分内容重复一遍,以便使用者能够根据自己的实际情况分开控制html,js,css,图片等。我就不一一列举了。

9、User Agent Groups

管理用户代理组,这个名字很别扭。它的实际作用就是将一些用户进行302转跳。应用场景如下:当一个网站具有桌面浏览的一套主题在域名www.plus086.com上,手机浏览的一套主题在域名m.plus086.com上,那么当手机用户访问www.plus086.com的时候,会通过302转跳,将这个请求转跳到m.plus086.com上。

Theme:对应的式样
Redirect user to:转跳到的地址
user agents:这个组包含哪些用户
可以设置多个组,转跳到不同的式样。

10、Referrer Group

这个功能和上面的类似,仅仅是识别来源的方式不同。默认设置里面已经帮我们设置了一个搜索引擎的转跳。
剩下的CDN,Monitoring,Extensions就没必要将了,有些绑定的国外付费服务。

本文系作者 @ 原创发布在 懵比小站。未经许可,禁止转载。

喜欢()
评论 (0)
热门搜索
homeagain
分享互联网最新资讯,分布各类教程:苹果cms、vps推荐、宝塔建站知识、edu邮箱、wordpress模板下载……只有你想不到,没有出不了的教程。
243 文章
192 评论
100 喜欢
Top