Rocket-Nginx 是 WordPress 缓存插件 WP Rocket 的 Nginx 配置。它使 Nginx 能够直接提供先前缓存的文件,而无需调用 WordPress 或任何 PHP。它还添加标头来缓存 CSS、JS 和媒体,以便通过减少对 Web 服务器的请求来利用浏览器的缓存。
您可能会问自己:“这个配置有多好?”。
假设 WP Rocket 自己在他们的网站上使用它来使其速度更快!
该项目由位于加拿大蒙特利尔附近的 WordPress 维护服务 SatelliteWP 赞助。我们的服务以英语和法语提供。 SatelliteWP 是 WordPress 网站入口。
该配置由 Maxime Jobin (@maximejobin) 创建,现在由 SatelliteWP 维护。
由于配置的目标是直接提供缓存文件,而无需从 WordPress 执行任何 PHP,因此这可能会导致您的计划作业无法被调用。您可能已经知道,WP-Cron 作业不是真正的 cron 作业,仅当您访问站点时才会执行。
为了确保您的计划任务按时运行,强烈建议禁用 WordPress cron 作业并创建一个真正的 cron 作业。
要禁用 WordPress cron 作业,请将以下行添加到您的wp-config.php
中:
define( 'DISABLE_WP_CRON', true );
然后,每 15 分钟手动执行一次 cron 作业(对于大多数网站来说应该足够了):
*/15 * * * * wget -q -O - http://www.website.com/wp-cron.php?doing_wp_cron &>/dev/null
或者
*/15 * * * * curl http://www.website.com/wp-cron.php?doing_wp_cron &>/dev/null
或者
*/15 * * * * cd /home/user/public_html; php wp-cron.php &>/dev/null
确保测试您的任务在此更改后仍然运行!
要使用该脚本,您必须将其包含在实际配置中。如果您的 WordPress 网站尚未配置为使用 Nginx 运行,您可以查看 WordPress 文档中的 Nginx 配置。
使用 WP Rocket 的所有 WordPress 网站只需要一个 Rocket-Nginx 实例。您可以根据需要生成任意数量的配置文件。
您可以在 Nginx 配置目录中创建一个文件夹rocket-nginx
目录。如果您使用 Ubuntu,您的 Nginx 配置 (nginx.conf) 应位于: /etc/nginx/
。
要安装,您可以:
cd /etc/nginx
git clone https://github.com/satellitewp/rocket-nginx.git
从2.0版本开始,必须生成配置。要生成默认配置,您必须重命名禁用的 ini 文件并运行配置解析器:
cd rocket-nginx
cp rocket-nginx.ini.disabled rocket-nginx.ini
php rocket-parser.php
这将生成可包含在所有网站中的default.conf
配置。如果需要更改默认配置,可以编辑 ini 文件并在文件底部添加另一个部分。
然后,在 Nginx 配置文件中,必须包含生成的配置。如果您的网站配置位于/etc/nginx/sites-available
中,您需要更改您的配置:
server {
...
# Rocket-Nginx configuration
include rocket-nginx/conf.d/default.conf;
...
}
在重新加载配置之前,请确保对其进行测试: nginx -t
测试完成后,您必须重新加载配置。 service nginx reload
就是这样。
无需进行任何配置。它开箱即用。但是,您可以编辑一些内容......
只需打开rocket-nginx.ini
文件并查看其中的所有选项。
您可以基于默认配置添加新部分,如下所示:
# This creates the new section and will generate a new configuration
[example.com : default]
# This will add a value to invalidate the cache with a cookie
cookie_invalidate[] = "my_custom_cookie"
编辑 ini 文件后,必须通过运行解析器重新生成 Nginx 配置文件:
php rocket-parser.php
然后,新添加或修改的部分将生成更新配置文件(*.conf)。
最后,每次生成(或重新生成)配置文件时,您必须:
测试它以确保它没有产生任何错误:
nginx -t
重新加载配置:
service nginx reload
从版本 3.0 开始,将创建一个conf.d
文件夹。对于您创建的每个不同的配置文件,都会在该文件夹内创建一个子文件夹。在其中,您可以创建将包含在生成的配置文件中的文件。
您可以在不同时间包含配置文件。
在默认配置文件中,在conf.d/default/
中创建一个具有以下文件名模式的文件: start.*.conf
。
在默认配置文件中,在conf.d/default/
中创建一个具有以下文件名模式的文件: global.*.conf
。
在默认配置文件中,在conf.d/default/
中创建一个具有以下文件名模式的文件: http.*.conf
。
在默认配置文件中,在conf.d/default/
中创建一个具有以下文件名模式的文件: preprocess.*.conf
。
在默认配置文件中,在conf.d/default/
中创建一个具有以下文件名模式的文件: css.*.conf
。
在默认配置文件中,在conf.d/default/
中创建一个具有以下文件名模式的文件: js.*.conf
。
在默认配置文件中,在conf.d/default/
中创建一个具有以下文件名模式的文件: media.*.conf
。
您可能想检查您的文件是否直接由 Nginx 提供并且不调用任何 PHP。为此,请打开rocket-nginx.ini
文件并更改调试值:
debug = false
到:
debug = true
无论 debug 设置为 true 或 false,都会出现以下标头:
不提供缓存文件的原因:
Rocket-Nginx 完美吗?不,不是!我们试图使其尽可能完美,但是 Nginx 的脚本语言并没有提供 PHP 等语言所提供的所有可能性。因此,存在一些限制。
编码段
简短回答:Rocket-Nginx 无法提供编码的 slug。
由于 Nginx 的脚本限制,像 'ٛ٩٠' 这样的 slugs 会被编码,并且 WP Rocket 将文件存储为 '%d8%ac%d8%b2%d8%a7%d8%b2%d8%a9%20%d8%a7 %d9%84%d8%b9%d8%b4%d8%a8'(小写)。某些浏览器(例如 Google Chrome)会将请求发送为 '%D8%AC%D8%B2%D8%A7%D8%B2%D8%A9%20%D8%A7%D9%84%D8%B9%D8% B4%D8%A8'(大写)。使用像 PHP 这样的语言,可以很容易地比较这些字符串是否相等。对于 Nginx,除非需要第三方模块(如 Perl 或 Lua),否则这是不可能的。为了使 Rocket-Nginx 尽可能通用,决定不添加模块依赖项。如果您想支持编码的 slugs 并添加缺少的代码,请注意版本 3.1.0(及更高版本)提供了一个名为“preprocess”的新配置,用于修改$rocket_uri_path
变量大小写(强制小写)。
网页兼容性
简短回答:如果您激活 WebP 兼容性功能,Rocket-Nginx 将不会提供 WP Rocket 生成的 WebP 缓存文件。
如果您使用工具将图像(JPG、PNG 等)转换为 WebP,WP Rocket 能够创建特定的缓存。不幸的是,Nginx 的脚本语言不够强大,无法正确实现验证。因此,如果您激活此功能,Rocket-Nginx 将让 WP Rocket 处理请求并根据上下文提供正确的缓存页面。
Rocket-Nginx 是否兼容 BF Cache(后退/前进缓存)?
是的!如果您的网站不显示敏感数据并且非常适合后退/前进缓存,则必须按照问题中的 BF 缓存讨论来编辑 Rocket-Nginx 配置。
如何从版本 1 或 2 升级到版本 3?
我们建议您保存之前的配置并重新开始。借此机会回顾一下一切,因为很多事情都发生了变化。根据官方说法,3.x 版本不向后兼容以前的版本。从头开始的时间不应超过 15 分钟。
3.x 版本有什么新功能?
很多事情!
您对这个项目有什么基准吗?
不。人们对基准的喜爱程度与他们讨厌基准的程度一样多。所有基准测试中,人们都声称可以采取 X、Y 或 Z 来改善结果。在此项目中,基准测试将取决于您有多少插件影响页面,即使输出位于缓存中(例如,即使文件位于缓存中,WP Rocket 也会执行 PHP)。但我们可以说的是,您将从NGINX → PHP-FPM → WordPress(PHP 和数据库)→ 静态文件转到NGINX → 静态文件。换句话说,您直接从 NGINX 提供静态文件,而不是在提供静态文件之前将请求传递给 FPM,然后传递给 PHP(至少对于 WP Rocket...)。
如果我的网站使用 SSL 证书 (https),Rocket-Nginx 会工作吗?
是的! Rocket-Nginx 将检测请求是通过 HTTP 还是 HTTPS 发出,并根据请求类型提供正确的文件。从 1.0 版本开始,这两个协议都是自动处理的。
根据 MIT 许可证发布。有关详细信息,请参阅许可证文件。