WordPress网站开启Nginx静态加速提高并发[其它程序也可借鉴]

研究了一下Nginx的FastCGI模块,其功能就是静态请求自主处理,动态请求代理转发。简单说就是把页面缓存了,直接由Nginx返回缓存的html文档页面,PHP或Python无需再次动态计算构建页面,毕竟计算还是毕竟消耗资源的,请求多了不就炸了嘛。

之前分享过WP Super Cache插件的使用,其原理就是由PHP缓存页面,然后由PHP返回缓存的HTML页面,是快了,但并发还是老样子,只是比被访问时构建页面快一些。面对高并发时,例如页面被CC攻击,内存还是会被拉满,PHP-FPM不知道创建了多少进程。

本次分享的是由Nginx返回HTML缓存,那并发真没得说,带宽只要峰值够高,那它真的无敌。看好了,这次的快会很帅!

需要放在主题function.php文件中,或插件实现

// 注册并加载自定义JS文件(底部引入)
function custom_enqueue_scripts() {
    // 1. 自定义本地JS文件(主题目录下的js文件夹)
    $custom_js_url = get_template_directory_uri() . '/js/custom-script.js';
    wp_enqueue_script(
        'custom-script', // 唯一标识(自定义名称)
        $custom_js_url,  // JS文件路径
        array('jquery'), // 依赖关系(如依赖jQuery,可省略)
        '1.0.0',         // 版本号(可省略,用于清除缓存)
        true             // 设为true,加载到页面底部
    );

    // 2. 第三方远程JS文件(如统计脚本)
    wp_enqueue_script(
        'third-party-script',
        'https://cdn.example.com/script.js',
        array(),
        false,
        true
    );
}
// 挂载到wp_enqueue_scripts钩子
add_action('wp_enqueue_scripts', 'custom_enqueue_scripts');
// 注册并加载自定义CSS文件
function custom_enqueue_styles() {
    // 注册并入队CSS文件
    $custom_css_url = get_template_directory_uri() . '/css/custom-style.css';
    wp_enqueue_style(
        'custom-style',  // 唯一标识
        $custom_css_url, // CSS文件路径
        array(),         // 依赖关系(可省略)
        '1.0.0'          // 版本号
    );
}
// 挂载到wp_enqueue_style钩子
add_action('wp_enqueue_style', 'custom_enqueue_styles');

访客的体验也是拉满的,我想,这么快的速度,也会提高收录吧?

Nginx启用FastCGI模块配置

首先你得安装ngx_cache_purge模块,宝塔的编译安装脚本中是自带的。使用以下命令检查是否存在ngx_cache_purge模块,若检查没有,那就得考虑一下重新编译安装了。它增加了从FastCGIproxySCGIuWSGI缓存中清除内容的功能,这是我们后续要用的,若是纯静态,不修改文章内容,就可以不安装该模块和wp插件。

nginx -V

关于安装请参考:https://github.com/FRiCKLE/ngx_cache_purge

接下来我们继续,在Nginx中启用FastCGI,并添加缓存区,这是重要步骤,同时对移动端和电脑端做了区分

首先在你的Nginx配置文件中找到http{}

创建缓存区,添加设备UA区分

编辑文件:/www/server/panel/vhost/nginx/0.fastcgi_cache.conf

将其中内容全部注释

打开目录:/dev/shm/nginx-cache,在其中创建文件夹,若提示/dev/shm下没有nginx-cache文件夹则创建,文件夹名为站点域名,总之路径为以下

/dev/shm/nginx-cache/站点域名

宝塔Nginx配置文件修改

功能注释及配置(其它程序可以依据注释适配自己的程序):

注意fastcgi_cache_path其中的配置,缓存目录和缓存标识,缓存目录是内存目录,你也可以设置为其它硬盘目录,这样不会占用内存,但速度会大减。

网站Nginx配置启用静态缓存

做了这个操作,你的网站才正式接入了Nginx缓存

宝塔网站配置文件在:/www/server/panel/vhost/nginx/你的域名.conf

注释PHP引用,在它前方添加#井号

添加以下配置

功能注释及配置(其它程序可以依据注释适配自己的程序):

注意fastcgi_pass unix配置,一定要改为你在用的PHP版本

注意fastcgi_cache配置,改为你的域名

如果你的站点需要实时更新内容,那就需要添加Purge入口,用于让Nginx Helper插件在文章更新或有评论时清除缓存。后续会说明Nginx Helper插件,别急

添加以下配置

创建系统任务防止目录丢失导致Nginx无法启动

我们网站页面缓存使用的目录是/dev/shm/nginx-cache/站点域名,但这个目录是内存目录,在重启服务器后就会丢失。而Nginx中引用了这个文件夹,在文件夹丢失的情况下,Nginx是无法启动的,会报错。所以我们需要创建一个系统任务,让其在系统启动时,创建这个目录,防止nginx无法启动。

/etc/tmpfiles.d/目录下创建nginx-cache.conf文件,其中填入以下配置,如有其它网站Nginx缓存,则换行增加

d /dev/shm/nginx-cache/站点域名 0755 www www - -

立即启动任务,让任务生效

systemd-tmpfiles --create /etc/tmpfiles.d/nginx-cache.conf

这样即可避免Nginx无法启动的问题

修改服务器hosts让域名指向本地

这是为了让你的网站在服务器内请求,不再走公网请求网站

Linux hosts配置文件在:/etc/hosts

其它系统及操作教程见:

一行一个,在结尾换行添加以下

#127.0.0.1 你的域名,如以下,必须是你wp设置中的域名,若是有www,就必须添加www
127.0.0.1 wxsnote.cn

wordpress使用Nginx Helper插件(自动清理缓存)

在wp后台插件目录中搜索Nginx Helper安装并启用

插件没有中文,翻译教程见:

在设置中按图启用这几项,后续的设置按需即可

利用插件的PHP钩子创建移动端缓存清理接口

在主题的function.php文件中添加以下代码(子比主题创建func.php,开头填写<?php)

利用wordpress计划任务防止阻塞保存速度

Nginx Helper插件当前的清理缓存会等待返回结果,何况我们清理了两次,这就是双倍时间,你点击更新文章时可能需要等待20多秒,服务器性能差的话40秒都有可能,多以另辟蹊径利用计划任务做一个异步

wp-content文件夹创建mu-plugins文件夹,在其中创建插件,wxs-async-purge.php,其中填写以下代码

如何判断清理已经执行?

在以上代码中有日志开关,可以改为true开启,注意测试完要改为关闭!

找一篇文章,点保存更新文章,然后检查日志文件/wp-content/wxs-async-purge.log,若包含缓存已清除就代表正确执行

配置清理目录常量

在网站配置文件wp-config.php中数据表前缀下方添加常量

按照你的插件设置的清理缓存方法而决定

这适用于本文区分设置的配置,设置后,插件就不报错了,但插件设置清理方式中的[删除本地服务器缓存文件]可能会无效,无法清理移动端缓存,当然这个选择也用不到,其根本原因就是插件的BUG

不管选择哪个清理方式,在清理缓存按钮被点击触发后都会检查Nginx缓存目录,我们给它一个错误但不触发防跨站的目录即可

//Nginx页面缓存目录
define('RT_WP_NGINX_HELPER_CACHE_PATH', '/tmp/nginx-cache');

打开网站根目录下的.user.ini文件,做以下修改

open_basedir=/www/wwwroot/域名/:/tmp
改为
open_basedir=/www/wwwroot/域名/:/tmp:/dev/shm/nginx-cache/域名/

仅适用于不区分设备而缓存,及插件设置中清理方法选择[删除本地服务器缓存文件]的场景

//Nginx页面缓存目录
define('RT_WP_NGINX_HELPER_CACHE_PATH', '/dev/shm/nginx-cache/域名');

验证是否生效

1.清理浏览器缓存或打开一个无痕窗口

F12打开控制台,切换到网络选项

如下图,你选中网络中第一个,就是页面文档文件

device-type输出为pc,代表访客为PC;nginx-cache输出为HIT,代表命中了缓存,若是过期,未命中或跳过,就清理浏览器缓存[查看截图]或清除Cookie[查看截图],再刷新两次

问题解答

在2026年5月13日,安全研究机构depthfirst与F5联合披露了NGINX严重远程代码执行漏洞,该漏洞潜伏长达18年的安全漏洞,所以需要尽快更新至1.30.1以上,在宝塔面板中,只需要点击更新软件列表,然后在Nginx设置中,点击版本切换,选择nginx 1.30即可修复,会自动安装1.30系当前的最新版本1.30.1

当在切换Nginx版时,由于算新装,所以会丢失配置,导致无法启动Nginx,如以下报错

nginx:  "fastcgi_cache" zone "xxx.wxsnote.cn" is unknown in /www/server/nginx/conf/nginx.conf:96
nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

在Nginx配置文件http块中,补充以下内容,注意修改两处域名,在http {include mime.types;之间补充本文教程中提到过的配置,然后重启Nginx即可修复该错误

    # 新增 $device 变量,区分PC/移动端缓存
    fastcgi_cache_key "$scheme$request_method$host$request_uri$device";
    fastcgi_cache_path /dev/shm/nginx-cache/域名 levels=1:2 keys_zone=域名:100m inactive=60m max_size=1g;
    fastcgi_cache_use_stale error timeout invalid_header http_500;
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

    # 识别移动端请求,生成设备标识变量
    map $http_user_agent $device {
        default pc;
        ~*(Mobile|Android|iPhone|iPad|iPod|BlackBerry|Windows Phone|SymbianOS|webOS|HTC|LG|Nokia|Samsung|SonyEricsson|MIUI|Flyme|HarmonyOS) mobile;
    }

结语

综上,借助Nginx搭配FastCGI模块实现静态缓存,能让WordPress彻底摆脱PHP动态计算的束缚,服务器并发能力直接拉满。配置后记得搭配Nginx Helper插件自动清理缓存,兼顾速度与内容实时性。这套方案不仅适配 WordPress,其他动态程序也能借鉴。用好静态缓存,既能大幅提升访客浏览体验,又能降低服务器资源消耗,堪称高并发场景下的性价比优化方案。


本文参考:

如果你喜欢我的内容,可以赞助我哦!你的一点点心意,是我不断前进的动力!

© 版权声明

本内容来源于网络,仅供学习交流。如侵权请联系删除。

© 版权声明
THE END
php
喜欢就支持一下吧
点赞13 分享
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容