도메인 화이트리스트를 어떻게 처리합니까?

도메인 화이트리스트를 어떻게 처리합니까?

특정 도메인 이름을 허용 목록에 추가하는 방법을 알아보려고 합니다. 요청이 와 같은 특정 하위 도메인에서 시작된 경우 <id>.domain-name.com이미지에 대한 액세스는 승인된 도메인의 허용 목록으로 제한됩니다. 화이트리스트에 없는 도메인에서 요청하면 403 오류가 발생합니다.

정확히 무엇을 해야 할지 잘 모르겠습니다. 컨텍스트를 사용합니까 map?

예를 들어 내 nginx.conf는 다음과 같습니다.

map $http_host $whitelist {
  default 0;
  "~^(?<id>\w+)\.domain-name\.example\.com$" $id;

  # whitelist domains
  whitelist1 1;
  whitelist2 1;
}

server {
  listen 80;
  proxy_intercept_errors on;

  error_page 400 = @fallback;

  if ($whitelist = 0) {
    return 403;
  }

  proxy_pass $whitelist;
}

답변1

구성 nginx은 대부분 정확해 보이지만 예상대로 작동하도록 몇 가지 변경 사항을 적용할 수 있습니다.

먼저, 이미지에 액세스할 수 있는 실제 도메인 화이트리스트를 정의해야 합니다. 현재 구성에서는 두 개의 화이트리스트 도메인을 whitelist1및 으로 정의했습니다 whitelist2. 이를 이미지에 액세스할 수 있는 실제 도메인 이름으로 바꿔야 합니다.

$whitelist둘째, 맵 컨텍스트에서 변수를 요청하는 하위 도메인의 값으로 정의했습니다 . 그러나 실제로 필요한 것은 하위 도메인 없이 요청을 하는 도메인 이름의 값입니다. 다음과 같이 맵 컨텍스트를 수정하여 도메인 이름을 추출할 수 있습니다.

map $http_host $whitelist {
  default 0;
  "~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;

  # whitelist domains
  whitelist1 example.com;
  whitelist2 subdomain.example.com;
}

위의 예에서 정규식은 하위 도메인과 도메인 이름을 별도로 캡처합니다. 그런 다음 변수 $domain는 하위 도메인이 없는 도메인 이름 값으로 설정됩니다.

마지막으로 서버 블록의 변수를 사용하여 $whitelist이미지에 대한 액세스를 허용할지 거부할지 결정할 수 있습니다. 업데이트된 구성은 다음과 같습니다.

map $http_host $whitelist {
  default 0;
  "~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;

  # whitelist domains
  whitelist1 example.com;
  whitelist2 subdomain.example.com;
}

server {
  listen 80;
  proxy_intercept_errors on;

  error_page 400 = @fallback;

  if ($whitelist = 0) {
    return 403;
  }

  location /images {
    # allow access only to whitelisted domains
    allow $whitelist;
    deny all;

    # serve images from disk
    alias /path/to/images;
  }

  location @fallback {
    # handle errors
    return 400;
  }
}

관련 정보