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 表现的得力助手。保持简单、保持一致,让您和您的访客享受更快速、更流畅的网站体验!