在Ubuntu上配置Nginx缓存策略可以显著提高网站性能。以下是一些基本的缓存配置步骤和策略:
安装Nginx和相关模块: 确保你已经安装了Nginx以及必要的模块。你可以使用以下命令来安装Nginx:
sudo apt update
sudo apt install nginx
配置缓存目录:
在Nginx配置文件中,你需要指定一个目录来存储缓存文件。通常,这个目录位于 /var/cache/nginx
。你可以使用以下命令来创建这个目录(如果它不存在的话):
sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx
编辑Nginx配置文件:
打开Nginx的主配置文件,通常位于 /etc/nginx/nginx.conf
,或者你可以在 sites-available
目录下的特定虚拟主机配置文件中进行设置。例如:
sudo nano /etc/nginx/sites-available/default
添加缓存配置:
在 server
块中,你可以添加以下配置来启用缓存:
http {
# 缓存路径
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
upstream backend {
server unix:/var/run/php/php7.4-fpm.sock; # 根据你的PHP版本调整
# 或者使用IP地址和端口
# server 127.0.0.1:9000;
}
}
在这个配置中:
proxy_cache_path
指令定义了缓存的存储路径、缓存层级、缓存区名称、最大缓存大小、缓存文件的最大非活动时间和是否使用临时路径。proxy_cache
指令指定了使用的缓存区名称。proxy_cache_valid
指令设置了不同HTTP状态码的缓存时间。add_header X-Proxy-Cache
指令添加了一个自定义头部,用于显示缓存状态。测试配置并重启Nginx: 在保存配置文件后,你可以使用以下命令来测试Nginx配置是否正确:
sudo nginx -t
如果配置测试通过,你可以重启Nginx来应用更改:
sudo systemctl restart nginx
使用ETag和Last-Modified:
在 location
块中添加以下配置:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
etag on;
if_modified_since exact;
# 其他配置...
}
分类型设置缓存时间: 根据不同类型的文件设置不同的缓存时间:
location ~* \.(jpg|jpeg|png|gif|svg|ico)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
location ~* \.(css|js)$ {
expires 30d;
add_header Cache-Control "public";
}
location ~* \.(woff|woff2|ttf|eot)$ {
expires 180d;
add_header Cache-Control "public";
}
缓存验证配置:
location /static/ {
proxy_cache static_cache;
proxy_cache_valid 200 302 12h;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
# 其他配置...
}
当静态文件更新时,需要确保用户能获取最新版本:
style.a1b2c3.css
)。style.css?v=1.0.0
)。public
指令允许中间缓存(如CDN)存储内容。immutable
:对于带哈希的文件名,可以使用 immutable
告诉浏览器内容永远不会改变。