WordPress使用Nginx提速

1,138 阅读3分钟
原文链接: gsbk.org

前言

使用WordPress搭建好网站以后,我们需要优化网站的访问速度。要整体提升网站的速度,需要不同的优化策略配合。尽量减少非必要的功能、把网站上的图片放到cdn中、压缩js、压缩css等,那么今天我想给大家介绍方法的是:Nginx缓存

有了nginx缓存,可以让你的网站提速1倍以上,光速博客(gsbk.org)在没有使用nginx缓存前需要1500毫秒才能完全加载首页,使用了nginx缓存以后,加载速度平均在600毫秒以内。

实现

我们按照以下步骤进行操作:

1. 安装Nginx ngx_cache_purge模块

打开服务器命令行工具,检查nginx模块是否已经安装

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

如果出现 ngx_cache_purge ,代表已经安装成功
WordPress使用Nginx提速

2. 打开Nginx配置文件,开启fastcgi_cache缓存配置

记住这里需要修改的是nginx的核心配置文件,而不是网站的配置文件,因为如果给每个网站的nginx配置文件都添加fastcgi_cache缓存的话,可能会冲突。

找到服务器上Nginx的配置文件,然后打开修改,把以下内容添加到http配置内,缓存文件地址:/tmp/wpcache、/tmp/wpcache/temp请自行创建好。

  1. fastcgi_cache_path /tmp/wpcache levels=1:2
  2. keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
  3. fastcgi_temp_path /tmp/wpcache/temp;
  4. fastcgi_cache_key "$scheme$request_method$host$request_uri";
  5. fastcgi_cache_use_stale error timeout invalid_header http_500;
  6. #忽略一切nocache申明,避免不缓存伪静态等
  7. fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

WordPress使用Nginx提速

3. 网站配置fastcgi_cache缓存规则

我们应该给不同的网站创建nginx配置,这样在修改配置的时候就不会互相影响,我们直接修改某个网站的nginx配置,如下:

  1. server
  2. {
  3. listen 80;
  4. listen 443 ssl http2;
  5. server_name gsbk.org www.gsbk.org;
  6. index index.php index.html index.htm default.php default.htm default.html;
  7. root /www/wwwroot/gsbk.org;
  8. set $skip_cache 0;
  9. #post访问不缓存
  10. if ($request_method = POST) {
  11. set $skip_cache 1;
  12. }
  13. #动态查询不缓存
  14. if ($query_string != "") {
  15. set $skip_cache 1;
  16. }
  17. #后台等特定页面不缓存(其他需求请自行添加即可)
  18. if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
  19. set $skip_cache 1;
  20. }
  21. #对登录用户、评论过的用户不展示缓存
  22. if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
  23. set $skip_cache 1;
  24. }
  25. #这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!
  26. location ~ [^/]\.php(/|$)
  27. {
  28. try_files $uri =404;
  29. fastcgi_pass unix:/tmp/php-cgi-72.sock;
  30. fastcgi_index index.php;
  31. include fastcgi.conf;
  32. add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
  33. #新增的缓存规则
  34. fastcgi_cache_bypass $skip_cache;
  35. fastcgi_no_cache $skip_cache;
  36. add_header X-Cache "$upstream_cache_status From $host";
  37. fastcgi_cache WORDPRESS;
  38. add_header Cache-Control max-age=0;
  39. add_header Nginx-Cache "$upstream_cache_status";
  40. add_header Last-Modified $date_gmt;
  41. add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套
  42. add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
  43. add_header X-XSS-Protection "1; mode=block"; # XSS 保护
  44. etag on;
  45. fastcgi_cache_valid 200 301 302 1d;
  46. }
  47. #缓存清理配置(可选模块,请细看下文说明)
  48. location ~ /purge(/.*) {
  49. allow 127.0.0.1;
  50. allow "更换成服务器的真实ip";
  51. deny all;
  52. fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
  53. }
  54. -------------缓存配置到此为止,以下内容无需关注----------------
  55. #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
  56. #error_page 404/404.html;
  57. #HTTP_TO_HTTPS_START
  58. if ($server_port !~ 443){
  59. rewrite ^(/.*)$ https://$host$1 permanent;
  60. }
  61. #HTTP_TO_HTTPS_END
  62. ssl_certificate /www/server/panel/vhost/cert/gsbk.org/fullchain.pem;
  63. ssl_certificate_key /www/server/panel/vhost/cert/gsbk.org/privkey.pem;
  64. ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  65. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  66. ssl_prefer_server_ciphers on;
  67. ssl_session_cache shared:SSL:10m;
  68. ssl_session_timeout 10m;
  69. error_page 497 https://$host$request_uri;
  70. #SSL-END
  71. #ERROR-PAGE-START 错误页配置,可以注释、删除或修改
  72. #error_page 404 /404.html;
  73. #error_page 502 /502.html;
  74. #ERROR-PAGE-END
  75. #PHP-INFO-START PHP引用配置,可以注释或修改
  76. include enable-php-74.conf;
  77. #PHP-INFO-END
  78. #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
  79. include /www/server/panel/vhost/rewrite/gsbk.org.conf;
  80. #REWRITE-END
  81. #禁止访问的文件或目录
  82. location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
  83. {
  84. return 404;
  85. }
  86. #一键申请SSL证书验证目录相关设置
  87. location ~ \.well-known{
  88. allow all;
  89. }
  90. location / {
  91. try_files $uri $uri/ /index.php?$args;
  92. }
  93. # Add trailing slash to */wp-admin requests.
  94. rewrite /wp-admin$ $scheme://$host$uri/ permanent;
  95. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  96. {
  97. expires 30d;
  98. error_log off;
  99. access_log /dev/null;
  100. }
  101. location ~ .*\.(js|css)?$
  102. {
  103. expires 12h;
  104. error_log off;
  105. access_log /dev/null;
  106. }
  107. access_log /www/wwwlogs/gsbk.org.log;
  108. error_log /www/wwwlogs/gsbk.org.error.log;
  109. }

到这里Nginx缓存已经配置完毕,我们需要重载Nginx配置,然后重启Nginx

  1. nginx -s reload

我们打开网站调试看一下,显示首页已经被nginx缓存命中(HIT)了,加载速度也在600毫秒之内。
WordPress使用Nginx提速
WordPress使用Nginx提速

缓存已经生效了,但是当我们更新官网内容的时候,客户刷新页面是拿不到最新的内容的,因为页面读取的是缓存的数据,我们怎么解决这个问题呢?

4. 安装Nginx Helper插件

WordPress有一款插件Nginx Helper,它可以监控Workpress的数据变化,例如文章新增,文章更新,评论新增,评论更新等,然后自动进行缓存的清理,这样当我们创建一篇新文章的时候,插件会识别得到,并且清理首页缓存,客户再次刷新的时候就没有缓存可读,然后走的是数据库查询,首页再次被缓存下来。

插件可以直接搜索安装
WordPress使用Nginx提速

配置页面:
WordPress使用Nginx提速
WordPress使用Nginx提速

由于插件作者定义的缓存路径是 /var/run/nginx-cache,而我们指定的缓存路径是 /tmp/wpcache ,所以我们需要修改 WordPress 的默认缓存路径,找到网站根目录下的 wp-config.php 中新增如下代码即可:

  1. //根据实际情况定义缓存的存放路径
  2. define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/tmp/wpcache');

总结

一个网站是否高质量,最低要求就是访问速度必须要快,本文介绍的Nginx fastcgi_cache缓存,是基于Nginx为页面生成缓存来加速WorkPress,而且还支持html伪静态页面,效率比使用PHP缓存插件要高得多,速度得到了质的飞跃(提速1倍,600ms响应),这种适合低配置的海外服务器,优化起来就好像国内服务器一样的速度了。

文章原创:光速博客(gsbk.org),禁止转载!