解决:Nginx如何实现类似if else的检测

解决:Nginx如何实现类似if else的检测

前言: 项目中所用Gateway 在处理OAuth Notification时设置了certificate verification, 燃鹅架构师觉得这是internal url handling, 并不需要设置。

"x509: certificate signed by unknown authority"

所以在report ticket 的同时做了暂时的解决方案 -> 让OAuth Notification URL 发送到 public accessible 的 URL。可是这容易暴露了危险,万一各位玩官随意发送request不就崩了。所以在Nginx层还需要检测location uri + header(shared secret). 如果没有那就返回403.


问题: 在尝试去做以上 double check 时,本以为是个简单的 if else 的逻辑,燃鹅 Nginx 并不支持多重判断。


解决:用多个 if 还有 flag 来曲线救国

## Only uri /oauth/notify with correct shared secret is allowed
set $flag 0;
if ( $request_uri ~* "/oauth/notify" ) {
     
  set $flag "${flag}1";
}

if ( $http_x_shared_secret !~ "shared_secret" ) {
     
   set $flag "${flag}1";
}

if ( $flag = "011" ) {
     
  return 403;
}

你可能感兴趣的:(Nginx,nginx)