一、核心配置优化
1. 基础静态文件配置
server {
listen 80;
server_name static.example.com;
# 根目录设置
root /var/www/static;
location / {
# 关闭目录列表
autoindex off;
# 尝试直接文件,不存在则404
try_files $uri $uri/ =404;
# 静态文件缓存头
expires 1y;
add_header Cache-Control "public, immutable";
# 禁用access_log提升性能
access_log off;
}
}
2. 高性能优化配置
http {
# 文件句柄缓存优化
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# 启用sendfile零拷贝
sendfile on;
# TCP优化
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
# 静态文件专用server
server {
listen 80 reuseport;
server_name static.example.com;
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
root /data/static;
# 缓存控制
expires max;
add_header Cache-Control "public, immutable";
# 防文件遍历
location ~ /\. {
deny all;
}
# 启用gzip压缩(文本类文件)
location ~* \.(css|js|svg)$ {
gzip_static on;
gzip_vary on;
}
}
}
}
二、高级优化策略
1. 多级缓存策略
# 边缘缓存层
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:100m
inactive=365d max_size=10g;
server {
location ~* \.(jpg|png|css|js)$ {
proxy_cache static_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 365d;
proxy_cache_use_stale error timeout updating;
proxy_cache_lock on;
# 源站设置
proxy_pass http://origin-server;
}
}
2. CDN回源配置
# 仅限CDN IP访问
allow 203.0.113.0/24; # CDN IP段
deny all;
location /static/ {
# 源站设置更短缓存时间
expires 1h;
add_header Cache-Control "public, max-age=3600";
# 断点续传支持
slice 1m;
proxy_set_header Range $slice_range;
}
3. 动态静态分离架构
# 动态请求
upstream app_servers {
least_conn;
server 10.0.1.10:8000;
server 10.0.1.11:8000;
}
# 静态资源路由
map $uri $is_static {
default 0;
~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|mp4|pdf)$ 1;
}
server {
listen 80;
# 静态资源直接服务
if ($is_static) {
rewrite ^ /static$uri;
}
location /static/ {
alias /data/shared_static/;
# Brotli压缩(需要模块)
brotli_static on;
# 安全头
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "DENY";
}
location / {
proxy_pass http://app_servers;
}
}
三、性能调优参数
1. 系统级优化
# nginx.conf主配置
worker_processes auto; # 自动匹配CPU核心
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
# 静态文件专用配置块
http {
# 静态文件优化
directio 4m; # 大文件直接IO
output_buffers 4 256k;
# MIME类型缓存
types_hash_max_size 2048;
}
2. 负载均衡配置
# 多个静态文件服务器
upstream static_cluster {
zone static_zone 64k;
# 最少连接数 + 权重
least_conn;
server static1.example.com:80 weight=3;
server static2.example.com:80 weight=2;
server static3.example.com:80 weight=2;
# 健康检查
check interval=3000 rise=2 fall=3 timeout=1000;
}
server {
location /assets/ {
proxy_pass http://static_cluster;
proxy_cache_use_stale error timeout http_500 http_502;
}
}
四、安全与监控
1. 安全加固
location ~* \.(php|asp|aspx|jsp|pl)$ {
deny all; # 禁止执行动态文件
}
# 防盗链
location ~* \.(jpg|png|mp4)$ {
valid_referers none blocked ~.google. ~.baidu. example.com;
if ($invalid_referer) {
return 403;
# 或重写为水印图片
# rewrite ^ /watermark.jpg;
}
}
2. 监控配置
# 状态监控
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
# Prometheus监控
location /metrics {
vhost_traffic_status_display;
vhost_traffic_status_display_format prometheus;
allow 10.0.0.0/8;
deny all;
}
五、部署建议
存储方案
- 小文件:本地SSD + tmpfs缓存
- 大文件:对象存储(S3兼容) + Nginx代理
- 热文件:内存缓存(open_file_cache)
架构模式
客户端 → CDN → 边缘缓存 → 源站Nginx → 存储
↓
(缓存未命中)
版本控制策略
# 使用内容哈希作为文件名
location ~* \.[a-f0-9]{8}\.(css|js)$ {
expires max;
add_header Cache-Control "public, immutable";
}
六、故障排查命令
# 查看连接状态
ss -ant | grep :80 | awk '{print $6}' | sort | uniq -c
# 监控Nginx状态
curl http://localhost/nginx_status
# 压力测试
wrk -t12 -c400 -d30s https://static.example.com/image.jpg
# 缓存命中检查
grep -c "HIT" /var/log/nginx/cache.log
注意事项
定期清理缓存:设置合理的inactive时间和max_size
监控磁盘IO:避免存储成为瓶颈
启用HTTPS:所有静态资源强制HTTPS
版本回滚准备:保持配置的可逆性
以上配置需要根据实际业务流量、文件类型分布和硬件资源进行调整。建议先在测试环境验证,然后灰度上线到生产环境。