Nginx,检查请求方法,而不使用IF?

我想优化我的Nginxconfiguration,但遇到了一个问题,我不知道如何解决。 我有一个文件夹/images在我的服务器上,我为网站提供各种静态文件。 虽然也使用相同的文件夹,以通过WebDAV上传文件。

因此,我必须检查每个请求是否存在静态文件,如果请求方法是GET ,则传递该文件。 否则,我假设请求与WebDAV(如PUT等)有关。 看到这个例子:

 if ($uri ~* ^/images) { set $getimages "${getimages}A"; } if ($request_method = GET) { set $getimages "${getimages}B"; } if ($getimages = "AB") { rewrite ^ $uri$args last; } 

这上面的示例工作正常。 但我想知道是否有另一种方法来做到这一点,而不使用IF。 鉴于Nginx Wiki中的IfIsEvil参考

想法任何人?

重新发表 Pothi 评论 CW

If不是邪恶的 ,如果在一个location块之外使用! 即使在一个location块内,也可以使用returnrewrite指令!

从IfIsEvil页面摘录

指令iflocation上下文中使用时有问题,在某些情况下,它不会做你期望的,而是完全不同的东西。 在某些情况下,甚至是段错误。 如果可能,避免它通常是一个好主意。

如果在location上下文中可以完成的唯一100%安全的事情是:

 return ...; rewrite ... last; 

其他任何可能导致不可预知的行为,包括潜在的SIGSEGV