如果文件不存在,则在nginx上进行内部redirect

我希望所有位于/ media /缩略图下的URL都是从磁盘提供的,如果该文件不存在,则从另一台服务器,但不redirect客户端。 我相信这应该工作,但我找不到有什么问题:

location /media/thumbnails { try_files $uri @thumbnail_generator; } location /media { root /home/plinio/nginx_test; break; } location @thumbnail_generator { proxy_pass http://127.0.0.1:8081/media_generate$uri; } 

即使在创build/home/plinio/nginx_test/media/thumbnails/test.txt文件之后,对/media/thumbnails/test.txt的请求仍在内部redirect到@thumbnail_generator。

您没有向我们展示完整的虚拟主机configuration,所以我不能肯定地说,但是您在/media位置块中使用root指令表明您可能没有在顶级虚拟主机configuration中具有root指令。

Nginx的location不是累积的; 它find最好的单个匹配 location块(根据文档中指定的规则),并使用它。 因此,如果您在vhostconfiguration本身中没有configuration,则您对/media/thumbnails/text.txt的查找不会进入您认为它们在文件系统上的位置,因此该文件不存在,内部redirect启动。

顺便说一下,通过打开debugging日志logging并查看虚拟主机错误日志,可以轻而易举地find这些问题。 Nginx很好logging它处理请求的过程,完全错误的文件path通常是一个很大的线索,你做错了什么。