Nginx的if语句中有多个条件

希望对你来说nginx guru很简单。 我找不到任何有关谷歌或文档的相关信息,但我希望这是可能的。

从本质上讲,使用从其他人获得的build议,我们希望阻止PHP在我们的公共上传目录中运行。 我们正在完成这样的事情:

if($uri !~ "^/vb_attach/") { fastcgi_pass 127.0.0.1:9005; } 

但在这个网站上,我们有多个上传目录。 我知道nginx不支持&&或|| 在有条件的,所以我们试过这个:

  if ($uri !~ "^/vb_attach/") { if($uri !~ "^/vb_album/") { fastcgi_pass 127.0.0.1:9005; } } 

但被告知第二个如果不允许那里。 那么我们该如何做到呢? 我们所要做的就是阻止PHP在这些上传目录中执行,以防万一有人能够绕过上传脚本中的检查。

一个最佳实践方式是使用拒绝PHP文件请求的location块。

例如:

 server { location /vb_attach { location ~ \.php$ {return 403;} } location /vb_album { location ~ \.php$ {return 403;} } location ~ \.php { ... } } 

nginx wiki有几个备选scheme可以防止这种特殊的安全问题,在其他情况下您也可能会遇到这种问题。