【发布时间】:2012-01-24 01:47:03
【问题描述】:
我在 CodeIgniter 中有一个动态内容控制器,可以从 GridFS 中提取图像。服务器正在运行 nginx,我正在尝试在我的 nginx 配置中设置缓存控制标头,以将此动态内容控制器提供的图像缓存 7 天。我在我的 nginx 配置中正确设置了配置,但是我从 nginx 获得了 404 标头,因为这些文件实际上并不存在于服务器上。
我的缓存控制指令如下:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 7d;
log_not_found off;
}
log_not_found 有助于防止 nginx 记录 404 错误,但发送到浏览器的标头仍然是 404 错误。我尝试通过 php 的“header”函数手动设置 headers,但是因为 nginx 使用的是 php-fpm,所以它做了一些奇怪的事情。
任何人都可以为我指出正确的方向吗?如何为这种情况正确设置缓存控制标头?谢谢大家=)
更新:
我更改了我的 nginx 配置文件,为我的所有静态文件和动态控制器设置了一个特殊位置。
location ~ ^/(dres|js|css|art)/ {
access_log off;
expires 7d;
add_header Cache-Control public;
try_files $uri $uri/ /index.php?$args;
}
Nginx 正在为静态文件设置正确的过期标头,但我终生无法让 fastcgi 和 nginx 输出动态输出图像的过期标头。我必须在我的 fastcgi 配置中遗漏一些东西,以在提供 php 文件时允许过期标头。
【问题讨论】:
-
我的动态内容的 uri 格式如下:example.com/controller/my_image_{imageid}.jpg 有一个重写,强制所有内容都通过站点的主 index.php 文件。如果我在重写到索引之前将该指令更改为我的控制器的路径,而不是匹配不存在文件的扩展名,那会防止 404 错误吗?
-
这是我的完整配置:pastebin.com/sJ1vrkwF 是的,任何非静态的东西都通过 php 运行。感谢您的帮助 =)
标签: codeigniter mongodb nginx gridfs dynamic-image-generation