하위 도메인의 와일드카드 필터링이 포함된 Nginx 스트림 블록

하위 도메인의 와일드카드 필터링이 포함된 Nginx 스트림 블록

nginx.conf 파일에 다음 구성을 사용하여 Nginx 서버를 L4 프록시(스트림 모듈이 포함된 정방향 프록시)로 설정했습니다.

stream {
resolver 8.8.8.8;
server {
    listen 443;
    ssl_preread on;
    proxy_connect_timeout 5s;
    proxy_pass $ssl_preread_server_name:$server_port;
  } 
}

위의 구성으로 모든 것이 잘 작동합니다. 하지만 프록시 서버로 전달되는 URL의 액세스를 제한하고 싶다고 가정해 보겠습니다. IP 주소를 제한하는 것이 아니라 URL 이름을 사용하여 제한합니다.
나는 다음 구성 파일을 조사하고 설정했으며 어떻게든 내 프록시로 전달되는 URL을 제어할 수 있었습니다.
그런데 문제는 여기서부터 시작됩니다. 대규모 웹사이트가 호출되면 이면에 많은 링크나 하위 도메인이 로드되어 있고 통과할 수 있는 URL을 제한했으며 와일드카드 하위 도메인이 스트림 블록에서 작동하지 않는다는 사실을 알고 있기 때문에 요청한 웹사이트를 로드할 수 없습니다. 완전히.
도메인의 하위 도메인에 대한 와일드카드를 지원하기 위해 스트림 블록에서 이를 사용하는 솔루션이 있습니까? 내 새로운 구성은 다음과 같습니다.

stream {


 map $ssl_preread_server_name $name {
     ipchicken.com ipchicken.com;
     www.bbc.com www.bbc.com;
     www.bbc.co.uk www.bbc.co.uk;
     bbci.co.uk bbci.co.uk;
}


server {

    resolver 8.8.8.8;
    listen 443;
    ssl_preread on;
    proxy_connect_timeout 5s;
    proxy_pass $name:$server_port;
   }
 }

 events {
}

답변1

키워드를 찾고 계십니다 hostnames. 이 키워드를 사용하면 도메인 *.example.com에 대한 와일드카드 항목으로 사용할 수 있습니다 . example.com마찬가지로 지시어와 마찬가지로 및 둘 다에 server_name사용할 수 있습니다 ..example.comexample.com*.example.com

map $ssl_preread_server_name $name {
    hostnames;
    .ipchicken.com    $ssl_preread_server_name;
    .bbc.com          $ssl_preread_server_name;
    .bbc.co.uk        $ssl_preread_server_name;
    .bbci.co.uk       $ssl_preread_server_name;
}

대안으로 블록 내에서 정규 표현식을 사용할 수 있습니다 map.

map $ssl_preread_server_name $name {
    # covers 'bbc.com', 'www.bbc.com' and 'static.bbc.com':
    ~^(?:www\.|static\.)?bbc\.com$    $ssl_preread_server_name;
    ...
}

관련 정보