해결: Nginx 는 if else 와 유사 한 검 측 을 어떻게 실현 합 니까?

2479 단어 Nginxnginx
해결: Nginx 는 if else 와 유사 한 검 측 을 어떻게 실현 합 니까?
프롤로그: 프로젝트 에 사용 되 는 Gateway 는 OAuth Notification 을 처리 할 때 certificate verification 을 설 치 했 습 니 다. 거위 구조 자 는 이것 이 internal url handling 이 라 고 생각 하고 설정 할 필요 가 없습니다.
"x509: certificate signed by unknown authority"

그래서 report ticket 과 함께 일시적인 해결 방안 을 만 들 었 습 니 다. - > OAuth Notification URL 을 Public access 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;
}

좋은 웹페이지 즐겨찾기