Nginx 配置文件中如何配置动静分离将图片请求转发到特定目录

作者:袖梨 2026-09-03

Nginx中实现图片请求转发到特定目录,本质是用location匹配图片后缀,配合root(路径拼接)或alias(前缀替换)指向本地存储路径,并启用缓存与权限校验。

在 Nginx 配置文件中实现“图片请求转发到特定目录”,本质是让 Nginx 直接读取本地静态文件(如 .jpg.png 等),不经过后端(如 Tomcat),从而完成动静分离中的“静”部分。关键在于用 location 匹配图片后缀 + root 或 alias 指向真实存放路径

匹配图片请求并指定根目录(推荐 root)

适用于图片 URL 路径与磁盘路径结构一致的情况。例如访问 /image/logo.png,对应文件在 /data/static/image/logo.png

  1. server 块内添加如下配置:
location ~* .(jpg|jpeg|png|gif|bmp|webp)$ {root /data/static;expires 30d;add_header Cache-Control "public";}

说明:

~* 表示忽略大小写的正则匹配;

root /data/static 表示将请求路径(如 /image/logo.png)拼接到该路径后查找文件,即最终读取 /data/static/image/logo.png

expires 30d 启用浏览器缓存,减少重复请求。

匹配图片请求并映射到精确目录(用 alias)

当希望所有图片都从一个固定目录下直接查找(不保留 URL 中的路径层级),用 alias 更合适。例如所有 /*.jpg 都从 /data/pics/ 下找:

  1. 配置示例:
location ~* .(jpg|jpeg|png|gif|bmp|webp)$ {alias /data/pics/;expires 7d;}

注意:

alias 后必须以 / 结尾;

– 它会完全替换掉匹配到的 location 路径,比如请求 /upload/test.jpg,Nginx 实际查找的是 /data/pics/test.jpg(不是 /data/pics/upload/test.jpg);

– 若需保留子目录结构,仍应选 root

补充:确保目录可读与权限正确

Nginx 工作进程(通常是 nginxwww-data 用户)必须对目标目录有读取权限:

  1. 执行命令确认目录权限:ls -ld /data/static /data/pics
  2. 若提示 403 Forbidden,常见原因是目录缺少执行(x)权限(Linux 中进入目录需要 x 权限),运行:chmod 755 /data/static /data/pics
  3. 检查 SELinux 是否启用(CentOS/RHEL):getenforce,如为 Enforcing,可临时设为 permissive 测试,或用 chcon -R -t httpd_sys_content_t /data/pics 授权。

验证是否生效

修改配置后务必检查并重载:

  1. nginx -t —— 验证语法;
  2. nginx -s reload —— 平滑重载配置;
  3. 浏览器访问如 http://your-domain.com/photo.jpg,查看响应状态码是否为 200,响应头中是否有 Cache-Control: publicExpires 字段。

相关文章

精彩推荐