要启用Nginx作为反向代理并配置缓存,可以使用以下基本配置:
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m 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;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# 其他代理设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
/var/cache/nginx
: 缓存文件存储路径levels=1:2
: 目录层级结构keys_zone=my_cache:10m
: 定义共享内存区域名称和大小(10MB)inactive=60m
: 60分钟内未被访问的缓存将被删除use_temp_path=off
: 不使用临时路径存储缓存文件proxy_cache_valid 200 302 10m; # 成功响应缓存10分钟
proxy_cache_valid 404 1m; # 404响应缓存1分钟
# 当后端服务器出错时使用过期缓存
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# 缓存键设置
proxy_cache_key "$scheme$request_method$host$request_uri";
# 忽略Set-Cookie头,防止缓存被跳过
proxy_ignore_headers Set-Cookie;
# 或者处理Set-Cookie
proxy_cache_bypass $http_set_cookie;
proxy_no_cache $http_set_cookie;
调整缓存大小:
keys_zone
大小缓存分区:
proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:10m inactive=1d use_temp_path=off;
proxy_cache_path /var/cache/nginx/dynamic levels=1:2 keys_zone=dynamic_cache:20m inactive=1h use_temp_path=off;
启用gzip压缩:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
启用Brotli压缩(如支持):
brotli on;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
添加缓存状态头信息:
add_header X-Proxy-Cache $upstream_cache_status;
日志记录缓存状态:
log_format cache_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Cache: $upstream_cache_status';
常用监控命令:
# 查看缓存目录大小
du -sh /var/cache/nginx/
# 查找缓存文件
find /var/cache/nginx/ -type f | wc -l
http {
# 静态内容缓存
proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:50m inactive=7d use_temp_path=off;
# 动态内容缓存
proxy_cache_path /var/cache/nginx/dynamic levels=1:2 keys_zone=dynamic_cache:100m inactive=1h use_temp_path=off;
# 共享内存区域
proxy_cache_path /var/cache/nginx/temp levels=1:2 keys_zone=temp_cache:10m inactive=10m use_temp_path=on;
# 启用gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
gzip_proxied any;
server {
listen 80;
server_name example.com;
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
proxy_pass http://backend;
proxy_cache static_cache;
proxy_cache_valid 200 302 7d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
expires 7d;
access_log off;
}
# 动态内容缓存
location / {
proxy_pass http://backend;
proxy_cache dynamic_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
add_header X-Cache-Status $upstream_cache_status;
# 标准代理头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
upstream backend {
least_conn;
server backend1.example.com weight=5;
server backend2.example.com;
server backend3.example.com backup;
}
}
通过合理配置Nginx反向代理缓存,可以显著提升网站访问速度,减轻后端服务器负载,并提高整体系统的可靠性和响应能力。