在Ubuntu LNMP(Linux, Nginx, MySQL, PHP)环境中配置Nginx缓存可以显著提高网站性能。以下是详细的步骤和示例配置,帮助你设置Nginx的缓存功能。
1. 安装必要的软件包
首先,确保你的系统已经安装了Nginx和PHP-FPM。如果尚未安装,可以使用以下命令进行安装:
sudo apt update
sudo apt install nginx php-fpm
2. 配置PHP-FPM(可选)
确保PHP-FPM配置正确,以便Nginx能够正确处理PHP请求。编辑PHP-FPM配置文件:
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
检查并确保以下行未被注释,并且监听地址正确(通常是Unix socket):
listen = /run/php/php7.4-fpm.sock
然后重启PHP-FPM服务:
sudo systemctl restart php7.4-fpm
3. 配置Nginx服务器块
编辑Nginx的服务器块配置文件。通常位于/etc/nginx/sites-available/目录下。例如,编辑默认站点:
sudo nano /etc/nginx/sites-available/default
3.1 基本配置示例
以下是一个基本的Nginx配置示例,包含缓存设置:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# PHP-FPM 配置
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
# 缓存动态内容
location ~* \.(php)$ {
fastcgi_cache my_cache;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
fastcgi_cache_bypass $http_cache_control;
fastcgi_no_cache $http_cache_control;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param CACHE_KEY "$scheme$request_method$host$request_uri";
}
}
3.2 详细说明
-
静态文件缓存:对于常见的静态文件类型(如图片、CSS、JS),设置较长的缓存时间(例如30天),并添加适当的
Cache-Control头。 -
动态内容缓存:
fastcgi_cache:定义缓存区域名称,如my_cache。fastcgi_cache_valid:设置不同HTTP状态码的缓存时间。fastcgi_cache_use_stale:在服务器繁忙或缓存过期时,允许使用过期的缓存内容。fastcgi_cache_bypass和fastcgi_no_cache:根据HTTP头信息决定是否绕过缓存。
4. 创建缓存目录并设置权限
Nginx需要一个目录来存储缓存文件。创建并设置适当的权限:
sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx
5. 测试Nginx配置
在重新加载Nginx之前,测试配置文件是否有语法错误:
sudo nginx -t
如果一切正常,你应该会看到类似以下的输出:
nginx: configuration file /etc/nginx/nginx.conf test is successful
6. 重新加载Nginx服务
应用新的配置:
sudo systemctl reload nginx
7. 验证缓存是否生效
访问你的网站,并使用浏览器的开发者工具(通常按F12)查看网络请求。检查静态文件是否有Cache-Control头,并且响应头中包含X-Cache-Status,例如HIT表示缓存命中。
8. 进一步优化(可选)
8.1 使用第三方模块
Nginx的官方缓存模块功能有限,你可以考虑使用第三方模块如ngx_cache_purge来清除缓存,或者使用ngx_http_sub_module进行内容替换。
安装ngx_cache_purge:
-
下载模块:
git clone https://github.com/arut/nginx-cache-purge.git -
编译并安装:
cd nginx-cache-purge sudo apt install libpcre3 libpcre3-dev zlib1g-dev make gcc sudo ./configure sudo make sudo make install -
在Nginx配置中添加模块:
编辑Nginx配置文件,添加以下内容:
server { # ... 其他配置 ... location ~ /purge(/.*) { allow 127.0.0.1; deny all; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root/purge.php; fastcgi_param PURGE $1; } location ~ \.php$ { # ... 缓存配置 ... include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param CACHE_KEY "$scheme$request_method$host$request_uri"; } } -
创建
purge.php脚本:<?php if (isset($_GET['purge'])) { $file = __DIR__ . $_GET['purge']; if (file_exists($file)) { @unlink($file); echo "Purged: " . $file; } else { echo "File not found."; } } else { echo "No purge parameter."; } ?> -
重新加载Nginx:
sudo systemctl reload nginx
现在,你可以通过访问http://your_domain.com/purge/path/to/file来清除特定文件的缓存。
8.2 调整缓存参数
根据你的具体需求,调整缓存时间、缓存键等参数。例如,可以基于URL参数、Cookie等进行缓存控制。
8.3 使用Varnish(高级)
对于更高性能和更复杂的缓存需求,可以考虑使用Varnish作为反向代理缓存服务器,与Nginx结合使用。
总结
通过以上步骤,你可以在Ubuntu LNMP环境中成功配置Nginx缓存,提升网站的响应速度和用户体验。根据实际需求,进一步优化和扩展缓存策略,以达到最佳性能。