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

当代理服务器接收到http 302/301响应时,如何使nginx(代理)缓存实际内容而不仅仅是头?,nginx,Nginx,我正试图使用nginx作为临时http缓存,以尽量减少对内容的请求。我的内容位于多个服务器上,因此我不能使用静态proxy_pass参数直接发送到位置,而是使用重写到php脚本: rewrite /([^/]+\.jpg) /index.php?file=$1 break; proxy_pass http://www.phpserver.com; php脚本(可能是)然后返回一个带有http代码301的重定向到实际文件位置(例如) 问题是nginx返回重定向头,而不是检索、缓存和

我正试图使用nginx作为临时http缓存,以尽量减少对内容的请求。我的内容位于多个服务器上,因此我不能使用静态proxy_pass参数直接发送到位置,而是使用重写到php脚本:

rewrite      /([^/]+\.jpg)  /index.php?file=$1  break;
proxy_pass http://www.phpserver.com;
php脚本(可能是)然后返回一个带有http代码301的重定向到实际文件位置(例如)

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


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

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


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

我理解代理的概念,但在这种情况下,关键是nginx将作为代理。这个解决方案对我不起作用,因为我打算在实际应用程序中使用这个nginx代理的多个实例,而使用另一个代理是不行的。所以我有兴趣让nginx理解这个非常简单的逻辑。我也试着使用上游指令来达到同样的目的,但是404故障转移似乎没有正确启动。我已经通过上游池解决了这个问题。谢谢你的回答。