Nginx - 인증 헤더가 있는 경우 404를 어떻게 반환합니까?

Nginx - 인증 헤더가 있는 경우 404를 어떻게 반환합니까?

인터넷에 애플리케이션을 프록시하는 nginx 인스턴스가 있습니다. 응용 프로그램에 대한 인증을 시도하는 인터넷 요청에 대해 404를 반환하고 싶습니다. 응용 프로그램의 모든 공개 부분은 익명 액세스를 허용하기 때문입니다. 로컬 네트워크의 사용자만 인증할 수 있어야 합니다.

나는 단지 return 404를 사용하고 있기 때문에 간단한 if 블록을 사용할 수 있다고 생각하지만, 인증 헤더의 존재를 감지하는 데 가장 신뢰할 수 있는 if 조건이 무엇인지 확신할 수 없습니다.

if (auth headers exist) {
  return 404;
}

이를 확인하기 위해 if 블록에 무엇을 넣을 수 있는지 제안하는 사람이 있나요?

답변1

일반적으로 if 문은 권장되지 않습니다. 그렇지 않으면 최소한 몇 가지 부작용을 알고 있어야 합니다. 읽다nginx 블로그의 "If is Evil"자세히 알아보기

귀하의 질문에 대답하려면 확인하려는 헤더가 "승인"이라고 가정하면 초기 가정은 이미 매우 정확했습니다.

if ($authorization) {
    return 404;
}

그것은 이미 트릭을 수행해야 합니다. 또한 공용 서버 블록에만 이를 적용하려면 다음을 사용할 수 있습니다.ngx_http_access_module

답변2

일반적으로 요청을 인증하는 데 사용되는 Authorization 헤더가 요청에 있는지 확인할 수 있습니다. if 블록에서 $http_authorization 변수를 사용하여 이를 수행할 수 있습니다.

if ($http_authorization) {
  return 404;
}

또는 애플리케이션에서 사용하는 특정 인증 헤더가 있는지 확인할 수 있습니다. 예를 들어 애플리케이션이 X-Auth-Token을 인증 헤더로 사용하는 경우 다음과 같이 확인할 수 있습니다.

if ($http_x_auth_token) {
  return 404;
}

auth_basic 지시어로 보호되는 위치에 요청이 이루어진 경우에만 if 블록이 평가된다는 점을 기억하세요. 모든 요청에 ​​인증 헤더가 있는지 확인하려면 대신 map 지시문을 사용할 수 있습니다.

map $http_authorization $block_public_auth {
  default 0;
  "~" 1;
}

server {
  ...

  location / {
    if ($block_public_auth) {
      return 404;
    }

    ...
  }
}

위의 경우 위치에 관계없이 Authorization 헤더가 있는 모든 요청을 차단합니다.

관련 정보