如何在 Ubuntu 上设置 Nginx FastCGI 缓存

Nginx FastCGI Cache 通过减少 Ubuntu 服务器上的负载来提高网站的性能。它对动态内容特别有效,允许 Nginx 直接提供缓存内容,而无需使用 PHP 处理器。这加快了响应时间并降低了资源使用率。以下是 Nginx FastCGI Cache 为您的 Web 基础架构提供的主要功能和优势:

  • 高效的内容传递: Nginx FastCGI Cache存储动态内容输出,实现更快的访问和分发。
  • 减少服务器负载: 提供缓存内容可最大限度地减少 PHP 调用的次数,从而减轻服务器的负载。
  • 可扩展性: Nginx FastCGI Cache 有助于管理增加的流量,同时不会在网站增长时影响速度。
  • 可定制的缓存: 此选项可灵活设置缓存过期、绕过和更新条件以满足您的需求。
  • 改善用户体验: 更快的网站加载时间可以改善用户体验,对访客保留和 SEO 排名产生积极影响。
  • 资源优化: 优化服务器资源的利用率,更有效地处理并发请求。
  • 轻松调试: 提供直接的机制来调试和验证缓存内容,确保顺利运行。
  • 兼容性: 与流行的 CMS 平台无缝协作,无需大量配置即可提高其性能。

当我们进入技术操作方法时,请记住,实施 Nginx FastCGI Cache 是提高网站效率和用户满意度的战略方法。让我们开始使用 Nginx FastCGI Cache 增强网站的性能。

设置Nginx FastCGI缓存

编辑 FastCGI 缓存的 Nginx 配置文件

打开配置文件

首先,你需要打开 nginx.conf 文件。我们将使用 nano 文本编辑器,但您可以使用任何您熟悉的文本编辑器。输入此命令:

sudo nano /etc/nginx/nginx.conf

配置 FastCGI 参数

在文件内,找到 HTTP 块并添加以下行:

fastcgi_cache_path /var/nginx/fastcgi_cache levels=1:2 keys_zone=fcgicache:150m max_size=20g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

输入行后,按 CTRL + O, 类型 Y,然后按 CTRL + X 退出。

了解 FastCGI 参数

  • fastcgi_cache_path:此参数设置存储 FastCGI 缓存的位置(/var/nginx/fastcgi_cache)。它至关重要,因为它决定了缓存内容将驻留在何处。
  • levels=1:2:这会在您的缓存位置下创建一个两级目录层次结构。此设计有助于将文件分散到两个目录中,从而降低磁盘 I/O 瓶颈的风险。
  • keys_zone:指定共享内存区域的名称(fcgicache)及其大小(150M)。共享内存区域对于存储缓存键和元数据至关重要。
  • max_size:这定义了缓存的最大大小(在本例中, 20GB)。当达到此限制时,最旧的文件将被删除,以便为新文件腾出空间。
  • inactive:指定未访问的数据从缓存中删除的持续时间。在此示例中,它设置为 60 分钟。
  • use_temp_path:将其设置为 off 指示 Nginx 将文件直接写入指定的缓存文件夹,绕过使用临时存储区域。
  • fastcgi_cache_key:用于定义缓存查找的键。Nginx 创建此键的 MD5 哈希值,用作缓存文件的名称。

为 FastCGI 缓存配置 Nginx 服务器块

编辑服务器块文件

接下来,您需要编辑服务器块文件。在本例中,我们假设文件名为 example.com.conf.使用以下命令打开它:

sudo nano /etc/nginx/sites-available/example.com.conf

插入 FastCGI 缓存指令

假设您已经安装了 LEMP,请在 PHP 文件的位置块内插入以下行:

fastcgi_cache fcgicache;
fastcgi_cache_valid 200 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
add_header X-FastCGI-Cache $upstream_cache_status;

了解 FastCGI 缓存指令

  • fastcgi_cache:启用缓存并指定之前定义的共享内存区域。
  • fastcgi_cache_valid:定义特定 HTTP 状态代码的缓存持续时间。
  • fastcgi_cache_use_stale:设置 Nginx 可以使用陈旧缓存响应的条件。
  • fastcgi_cache_min_uses:指定在缓存之前必须请求响应的频率。
  • fastcgi_cache_lock:确保每次只有一个请求填充新的缓存元素,从而防止出现“缓存踩踏”。
  • add_header:添加自定义标题(X-FastCGI-Cache) 添加到 HTTP 响应中,指示响应是否由缓存提供。

在 Nginx 上配置 FastCGI 缓存清除

设置缓存清除

缓存清除允许您在缓存过期之前从缓存中删除内容。要配置缓存清除,请通过在服务器块文件中插入以下行来创建缓存清除指令:

location ~ /purge(/.*) {
    # Uncomment the following two lines to allow purge only from the webserver
    allow 127.0.0.1;
    deny all;
    fastcgi_cache_purge fcgicache "$scheme$request_method$host$1";
}

CTRL + O, 类型 Y,然后按 CTRL + X 退出文本编辑器。

缓存清除问题的替代方法

如果您在清除缓存时遇到问题,则可以调整缓存过期时间。对于中高流量网站,设置较低的过期时间(例如 2 小时不活动和 4 小时整体过期)通常更有效。

测试并重新启动Nginx服务器

测试配置

验证 Nginx 配置以避免语法错误或配置错误至关重要。使用以下命令:

sudo nginx -t

如果一切正确,您应该看到以下输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新启动Nginx服务器

最后,重新启动 Nginx 服务器以应用您所做的更改:

sudo systemctl restart nginx

创建并优化 Nginx FastCGI 缓存目录

创建 FastCGI 缓存目录

现在让我们创建 Nginx 存储缓存文件的目录。此路径之前在 nginx.conf 文件:

sudo mkdir -p /var/nginx/fastcgi_cache

使用 tmpfs 优化缓存目录(可选)

如果你的系统有足够的 RAM,你可以选择使用 tmpfs 将缓存存储在内存中。与磁盘​​存储相比,这可以缩短访问时间。但是,请谨慎,因为存储在 RAM 中会消耗大量内存资源。以下是您可以将缓存目录挂载为 tmpfs:

编辑 /etc/fstab 文件:

sudo nano /etc/fstab

在文件末尾添加以下行:

tmpfs   /var/nginx/fastcgi_cache   tmpfs   defaults,size=512M   0 0

这将为缓存分配 512MB 的 RAM。您可以根据系统资源相应地调整大小。

安装 tmpfs:

sudo mount -a

此配置可确保 FastCGI 缓存存储在内存中,从而以 RAM 利用率为代价提供更快的性能。

验证 Nginx FastCGI 缓存功能

使用 curl 测试 FastCGI 缓存

您可以使用以下方法验证 FastCGI Cache 是否正常工作 curl 命令。根据您的缓存设置,您可能需要运行该命令几次才能看到缓存命中:

curl -I http://www.your-domain.com

如果你没有 curl 安装后,你可以使用以下命令安装它:

sudo apt install curl -y

在输出中,查找 X-FastCGI-Cache: HIT 标头:

~$ curl -I https://www.example.com/
HTTP/1.1 200 OK
...
X-FastCGI-Cache: HIT
...

这表明该请求是由缓存提供的。

配置缓存排除

WordPress 管理页面、评论部分和站点地图等网站元素不应被缓存。要配置 Nginx 不缓存这些内容,请在 location (~\.php$) 在您的服务器块文件中行:

# Cache by default
set $skip_cache 0;

# Don't cache URIs containing the following
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-..php|^/feed/|/tag/./feed/|index.php|/.sitemap..(xml|xsl)") {
    set $skip_cache 1;
}

# Don't cache for logged-in users or comment authors
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

# POST requests and URIs with a query string should bypass the cache
if ($request_method = POST) {
    set $skip_cache 1;
}

if ($query_string != "") {
    set $skip_cache 1;
}

调试缓存排除(可选)

如果要添加注释以用于调试目的,则可以在每个注释下添加自定义注释 set $skip_cache 1; 像这样的语句:

set $skip_reason "your custom note";

这对于理解为什么在故障排除期间某些内容未被缓存很有用。

完成这些配置后,请确保测试配置并重新启动 Nginx:

sudo nginx -t
sudo systemctl restart nginx

Nginx FastCGI 缓存的最佳实践和注意事项

虽然 FastCGI 缓存可以提供显著的性能优势,但必须确保针对特定用例和服务器资源优化配置:

  • 在选择之前评估可用的 RAM 数量 tmpfs 用于缓存。确保您的服务器有足够的内存供其他关键进程使用。
  • 定制缓存排除以适合您的应用程序。提供的示例专门针对 WordPress,但您可能需要针对其他类型的应用程序使用不同的排除。
  • 定期监控缓存使用情况和性能。如果缓存占用过多磁盘空间或性能没有按预期提高,请考虑相应地调整缓存路径、大小或设置。

结论

好了,就是这样!我们已经完成了在 Ubuntu 服务器上安装 Nginx FastCGI Cache 的步骤,通过高效处理动态内容来提升网站的性能。请记住,维护缓存设置以满足网站需求是实现效益最大化的关键。不要回避调整设置以找到最佳点。无论您是经验丰富的专业人士还是服务器管理新手,我们都希望本指南能成为优化 Web 表现的得力助手。保持简单、保持一致,让您和您的访客享受更快速、更流畅的网站体验!

Joshua James
跟我来
Joshua James 的最新帖子 (查看全部)

发表评论