当proxy_pass服务器收到http 302/301响应时,如何使nginxproxy缓存实际内容而不是仅缓存标头?

问题描述

| 我正在尝试将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返回重定向标头,而不是检索,缓存和返回实际内容。 那么,如何使它从实际服务器中获取内容,而不仅仅是缓存标头?     

解决方法

Nginx只能用作代理。它对您的应用程序(站点)的逻辑一无所知,只是代理请求,并且可以缓存响应。 为了使该架构有效,您必须从nginx中删除“ 1”部分,并将此逻辑移至phpserver.com。 phpserver必须下载此文件并将其输出到nginx。即使是非常艰苦的操作,nginx也会缓存此响应,当接收到下一个请求时,nginx会直接从其缓存中给出响应。