当proxy_pass服务器收到http 302/301响应时,如何使nginx(代理)缓存实际内容而不仅仅是头文件?

时间:2011-04-12 18:16:16

标签: nginx

我正在尝试将nginx用作临时http缓存,以便最大限度地减少对内容的请求。我的内容在多个服务器上,因此我不能将静态proxy_pass参数用于直接位置,而是使用重写到php脚本:

rewrite      /([^/]+\.jpg)  /index.php?file=$1  break;
proxy_pass http://www.phpserver.com;

php脚本(可能是http://www.phpserver.com/index.php)然后将带有http代码301的重定向返回到实际文件位置(如http://www.contentserver1.com/filepath/file.jpg)。

问题是nginx返回重定向标头而不是检索,缓存和返回实际内容。

那么如何让它从实际服务器获取内容而不是缓存标题?

1 个答案:

答案 0 :(得分:0)

Nginx只能作为代理使用。它对您的应用程序(站点)的逻辑一无所知,它只是代理请求,并且可以用于缓存响应。

要使此架构正常工作,您必须从nginx中删除rewrite部分,并将此逻辑移至phpserver.com。 phpserver必须下载此文件并将其输出到nginx。即使操作非常困难,nginx也会缓存此响应,当接收到下一个请求时,nginx将直接从其缓存中给出响应。