我正在设置一个脚本(http://dbwebb.se/opensource/cimage)来执行一些图像处理,并且我希望缓存结果图像输出。我把那部分做得很好。
我遇到的问题是,当有人从缓存中下载图像时。查询字符串上的问号是在代理url上传递的,因此下载的映像具有默认的"test.jpg&height=200“文件名,该文件名在windows上不重新命名就无法正确打开。
我需要设置某种重写规则,以便第一个"?“字符改为"&“。如果请求只是针对文件名而没有任何其他参数,则仍然需要工作。
我需要添加什么才能使url使用"?“来访问,但以"&”的形式发送到服务器?
http://origin.example.com/img.php?src=folder1/test.jpg&height=200
http://cdn.example.com/dynimg/folder1/test.jpg&height=200
http://cdn.example.com/dynimg/folder1/test.jpg?height=200 http://cdn.example.com/dynimg/folder1/test.jpg
location /dynimg/ {
expires 14d;
proxy_pass http://origin.example.com/img.php?src=;
proxy_cache_valid 200 302 2880m;
proxy_cache_valid 404 1m;
}发布于 2016-06-11 12:34:28
您的图像处理应用程序应该发送Content-Disposition header,其中发送所需的文件名。这样,用户的浏览器将使用该文件名而不是从请求的URL派生的文件名。
Nginx代理缓存将保存Content-Disposition头,然后用户将获得正确的文件名。
https://serverfault.com/questions/782866
复制相似问题