Nginx if 语句中的多个条件

Nginx if 语句中的多个条件

希望这对各位 nginx 专家来说很容易。我在 Google 或文档中找不到任何相关信息,但我希望这是可能的。

本质上,我们利用从其他人那里获得的建议,希望阻止 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;
            }
    }

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

答案1

最佳实践方法带有location拒绝 PHP 文件请求的块。

例如:

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

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

  location ~ \.php {
    ...
  }
}

nginx wiki 上有有多种选择以防止这个特定的安全问题,您可能也会发现它在其他情况下很有用。

相关内容