lnmp1.2重新编译增加ngx_cache_purge通过Nginx服务器为WordPress进行缓存加速笔记

ngx_cache_purge安装
服务器上跑的lnmp1.2 1.0与1.3大同方法一样,注意把路径中的1.2修改为相应版本即可
ssh连接上去后,按以下步骤执行即可

安装ngx_cache_purge
查看是否安装

1
nginx -V 2>&1 | grep -o ngx_cache_purge

显示ngx_cache_purge则表示已经安装.

未安装,按以下步骤,下载模块源码并解压,依次执行即可

1
2
3
4
cd /root/lnmp1.2-full/src
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar xzf ngx_cache_purge-2.3.tar.gz
cd nginx-1.8.0

查看以前Nginx编译参数

1
nginx -V

显示以前编译的参数如下

1
2
3
4
5
6
nginx version: nginx/1.8.0
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55)
built with OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
TLS SNI support disabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module

配置中增加新模块ngx_cache_purge-2.3

1
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module <strong>--add-module=../ngx_cache_purge-2.3</strong>

开始编译,注意不要make install,只需要make

1
make

备份原来的Nginx编译文件,文件名称自动变成了nginx_2016-xx-xx(日期)

1
mv /usr/local/nginx/sbin/nginx{,_`date +%F`}

拷贝新的编译文件过去

1
cp objs/nginx /usr/local/nginx/sbin

检查是否编译ngx_cache_purge成功

1
nginx -V 2>&1 | grep -o ngx_cache_purge

若显示ngx_cache_purge则表示已经安装成功

修改WordPress配置,添加fastcgi_cache相关配置

这里我们将fastcgi_cache_path设置tmpfs内存中,这样比放在硬盘上更加快
什么是tmpfs内存?
tmpfs最主要的几个特点:

  1. 临时性:由于tmpfs是构建在内存中的,所以存放在tmpfs中的所有数据在卸载或断电后都会丢失;
  2. 快速读写能力:内存的访问速度要远快于磁盘I/O操作,即使使用了swap,性能仍然非常卓越;
  3. 动态收缩:tmpfs一开始使用很小的空间,但随着文件的复制和创建,tmpfs文件系统会分配更多的内存,并按照需求动态地增加文件系统的空间。而且,当tmpfs中的文件被删除时,tmpfs文件系统会动态地减小文件并释放内存资源。

简而言之:tmpfs就是linux文件系统在内存中划了一块区域,专门用来存放临时数据和缓存数据的,但是数据读取非常快
注意:操作系统不同tmpfs挂载路径也不同,如下:
CentOS系统:/dev/shm 我用的centos 故是/dev/shm/
Ubuntu和Debian系统:/run/shm

修改WordPress网站的Nginx配置文件,路径/usr/local/nginx/conf/vhost/XXXX.conf xxxx是你的网站的配置文件名称

1
2
3
4
5
6
7
8
9
#新增的缓存规则part1开始
#下面2行的中的wpcache路径请自行提前创建,否则可能会路径不存在而无法启动nginx,max_size请根据分区大小自行设置
fastcgi_cache_path /dev/shm/ levels=1:2 keys_zone=WORDPRESS:200m inactive=1d max_size=350M;
fastcgi_temp_path /dev/shm/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
#忽略一切nocache申明,避免不缓存伪静态等
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
#新增的缓存规则part1完
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
server
{
listen 80;
#listen [::]:80;
server_name xiaohost.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/xiaohost.com;

#新增的缓存规则part2开始
set $skip_cache 0;
#post访问不缓存
if ($request_method = POST) {
set $skip_cache 1;
}
#动态查询不缓存
if ($query_string != "") {
set $skip_cache 1;
}
#后台等特定页面不缓存(其他需求请自行添加即可)
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
#对登录用户、评论过的用户不展示缓存(这个规则张戈博客并没有使用,所有人看到的都是缓存)
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
#这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!
#新增的缓存规则part2完

location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
#include pathinfo.conf;
#新增的缓存规则part3开始
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache "$upstream_cache_status From $host";
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 1d;
#新增的缓存规则part3完
}
#新增的缓存规则part4开始
#缓存清理配置(可选模块,请细看下文说明)
location ~ /purge(/.*) {
allow 127.0.0.1;
allow "此处填写你服务器的真实外网IP";
deny all;
fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
}
#新增的缓存规则part4完

include wordpress.conf;
#error_page 404 /404.html;

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 7d;
}

access_log off;
# 若开启log日志,去掉相应的注释#即可开启相应功能
#robots.txt 不进行记录
#location=/robots.txt{access_log off;log_not_found off;}
# favicon.ico 不进行记录
#location=/favicon.ico{access_log off;log_not_found off;}
# 隐藏文件 不进行记录且禁止访问
#location~/\.{access_log off;log_not_found off;deny all;}
}
server {
server_name www.xiaohost.com;
return 301 $scheme://xiaohost.com$request_uri;
}

修改完毕保存后,重启Nginx

1
service nginx reload

若采用超过二级的缓存路径,重启系统后shm内存中nginx-cache文件夹会丢失,为了使重启生效(自动创建文件夹),修改/etc/init.d/nginx
以下代码加入start那段中

1
2
3
4
if [ ! -d '/dev/shm/你的缓存文件夹' ]; then
mkdir /dev/shm/你的缓存文件夹
chown -R ${user}.$user /dev/shm/你的缓存文件夹
fi

WordPress安装Nginx Helper插件

Nginx Helper设置

修改wordpress网站根目录wp-config.php添加如下行:
define(‘RT_WP_NGINX_HELPER_CACHE_PATH’,’/dev/shm’);

重启服务器

原文链接:https://xiaohost.com/1582.html,转载请注明出处。
0

评论2

请先
  1. 很不错!
  2. 牛哥,换主题了呀。能把友情链接改为https吗?完整地址:https://www.xiaoz.me/ 谢谢。