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 路径结构不一致时

两种方法的区别

  1. root会将 location 匹配的路径追加到指定目录后面
  2. alias会将 location 匹配的路径替换为指定目录
  3. alias末尾必须带斜杠,否则会报错
  4. root可以省略末尾斜杠

最佳实践

  1. 性能优化:

    • 使用expiresadd_header Cache-Control设置缓存
    • 对静态资源关闭访问日志
    • 考虑使用gzip压缩
  2. 安全配置:

    • 添加安全相关的响应头
    • 限制文件类型
    • 使用try_files处理文件不存在的情况
  3. 目录权限:

    • 确保 Nginx 用户对静态资源目录有读取权限
    • 建议使用专门的用户运行 Nginx
  4. 监控和维护:

    • 定期检查日志文件大小
    • 监控磁盘空间使用情况
    • 定期清理过期的缓存文件
posted @ 2025-05-22 21:24  Higurashi-kagome  阅读(469)  评论(0)    收藏  举报