Nginx 配置代理访问图片等资源(root 与 alias 的应用)
方法一:root
root
指令会将 location 匹配的路径追加到指定的目录后面。
server {
# ... 其他配置 ...
location /images/ {
root /data/static; # 直接映射本地路径
expires 7d; # 设置浏览器缓存 7 天
access_log off; # 关闭访问日志减少 IO
add_header Cache-Control "public"; # 明确指定缓存控制
try_files $uri $uri/ =404; # 处理文件不存在的情况
# 安全配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
}
}
}
- 访问
/images/cat.jpg
→ 实际路径/data/static/images/cat.jpg
- 特点:location 匹配的路径会追加到 root 指定的目录后面
- 适用场景:当静态资源目录结构与 URL 路径结构完全一致时
方法二:alias
alias
指令会将 location 匹配的路径替换为指定的目录。
server {
# ... 其他配置 ...
location /images/ {
alias /data/images/; # 末尾必须带斜杠,否则会报错
expires 7d;
access_log off;
add_header Cache-Control "public";
try_files $uri $uri/ =404;
# 安全配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
}
}
}
- 访问
/images/cat.jpg
→ 实际路径/data/images/cat.jpg
- 特点:location 匹配的路径会被 alias 指定的目录替换
- 适用场景:当静态资源目录结构与 URL 路径结构不一致时
两种方法的区别
root
会将 location 匹配的路径追加到指定目录后面alias
会将 location 匹配的路径替换为指定目录alias
末尾必须带斜杠,否则会报错root
可以省略末尾斜杠
最佳实践
-
性能优化:
- 使用
expires
或add_header Cache-Control
设置缓存 - 对静态资源关闭访问日志
- 考虑使用
gzip
压缩
- 使用
-
安全配置:
- 添加安全相关的响应头
- 限制文件类型
- 使用
try_files
处理文件不存在的情况
-
目录权限:
- 确保 Nginx 用户对静态资源目录有读取权限
- 建议使用专门的用户运行 Nginx
-
监控和维护:
- 定期检查日志文件大小
- 监控磁盘空间使用情况
- 定期清理过期的缓存文件