如何让动态图片地址,在浏览器中转为静态地址,并在浏览器缓存?

比如真实图片地址 http://180.0.0.1?imgid=12345
在浏览器输入 http://domain.com/12345.jpg 会反向代理到真实的地址同时会在浏览器进行图片缓存

nginx 如何配置,能写出详细配置最好了

阅读 3.2k
5 个回答

可以试下.大概就是这样.

locaton ~ /.*\.jpg {
    rewrite /(.*).jpg /?imgid=$1 break;
    
    expires 30d;
    proxy_set_header Host 180.0.0.1; # 这个地方要把 host 设置为图片保存的原始域名
    proxy_set_header X-Real-IP $remote_addr; # 透传 IP,可要可不要
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 透传 IP 可要可不要
    proxy_pass http://180.0.0.1; # 这个地方如果是ip 还好,如果是域名,还涉及到一个反向代理解析 IP 的问题,需要 nginx 配置中加上一个 dns reslover.
}

nginx对这种路径加个expires指令不就完了?就会在响应头带上cache-controlexpires两个头,浏览器就会自动处理了。

至于伪静态的处理,使用rewrite指令进行URL重写就行了

location ~ \.(gif|jpg|jpeg)$ {
   root /var/www/img/;
   expires 30d;
}

expires最简单的写法 ,表示缓存30天, 具体含义网上都有介绍的 expires

对浏览器来说,反向代理出来的地址一直是稳定的,即
http://domain.com/12345.jpg对浏览器来说一直是这个地址,不会变成http://180.0.0.1?imgid=12345的,最多声明这样的数据可以缓存而已。
因为反向代理对浏览器来说是透明的。

貌似应该反过来,把访问 /12345.jpg 的请求指向你生成图片的程序,然后传参,搞成 ?imgid=12345。然后再延长缓存时间。

没有调试,思路是这样,你可以试一下:

location ~ "/imgs/(?<page>\d+).jpg$" {
        alias /var/www/image-generator/img.php?imgid=$page;
        expires 30d;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题