nginx 重写 CImage 缓存

nginx 重写 CImage 缓存

我正在设置一个脚本(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

nginx 配置(重要区域):

location /dynimg/ {

                expires                 14d;

                proxy_pass              http://origin.example.com/img.php?src=;
                proxy_cache_valid       200 302 2880m;
                proxy_cache_valid       404 1m;

        }

答案1

您的图像处理应用程序应发送Content-DispositionHTTP 标头,其中包含所需的文件名。这样,用户的浏览器将使用该文件名,而不是从请求的 URL 派生的文件名。

Nginx 代理缓存会保存该Content-Disposition头部,然后用户就会得到正确的文件名。

相关内容