在Ubuntu LNMP(Linux, Nginx, MySQL, PHP)环境中配置Nginx缓存可以显著提高网站性能。以下是详细的步骤和示例配置,帮助你设置Nginx的缓存功能。
首先,确保你的系统已经安装了Nginx和PHP-FPM。如果尚未安装,可以使用以下命令进行安装:
sudo apt update
sudo apt install nginx 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
编辑Nginx的服务器块配置文件。通常位于/etc/nginx/sites-available/
目录下。例如,编辑默认站点:
sudo nano /etc/nginx/sites-available/default
以下是一个基本的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";
}
}
静态文件缓存:对于常见的静态文件类型(如图片、CSS、JS),设置较长的缓存时间(例如30天),并添加适当的Cache-Control
头。
动态内容缓存:
fastcgi_cache
:定义缓存区域名称,如my_cache
。fastcgi_cache_valid
:设置不同HTTP状态码的缓存时间。fastcgi_cache_use_stale
:在服务器繁忙或缓存过期时,允许使用过期的缓存内容。fastcgi_cache_bypass
和fastcgi_no_cache
:根据HTTP头信息决定是否绕过缓存。Nginx需要一个目录来存储缓存文件。创建并设置适当的权限:
sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx
在重新加载Nginx之前,测试配置文件是否有语法错误:
sudo nginx -t
如果一切正常,你应该会看到类似以下的输出:
nginx: configuration file /etc/nginx/nginx.conf test is successful
应用新的配置:
sudo systemctl reload nginx
访问你的网站,并使用浏览器的开发者工具(通常按F12)查看网络请求。检查静态文件是否有Cache-Control
头,并且响应头中包含X-Cache-Status
,例如HIT
表示缓存命中。
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
来清除特定文件的缓存。
根据你的具体需求,调整缓存时间、缓存键等参数。例如,可以基于URL参数、Cookie等进行缓存控制。
对于更高性能和更复杂的缓存需求,可以考虑使用Varnish作为反向代理缓存服务器,与Nginx结合使用。
通过以上步骤,你可以在Ubuntu LNMP环境中成功配置Nginx缓存,提升网站的响应速度和用户体验。根据实际需求,进一步优化和扩展缓存策略,以达到最佳性能。