¿Cómo manejaría la lista blanca de dominios?

¿Cómo manejaría la lista blanca de dominios?

Estoy tratando de averiguar cómo manejaría la inclusión en la lista blanca de ciertos nombres de dominio. Si la solicitud se origina en un subdominio particular, como <id>.domain-name.com, el acceso a las imágenes se restringirá a una lista blanca de dominios aprobados. Las solicitudes de dominios que no están en la lista blanca generarán un error 403.

¿No estoy seguro de qué debería hacer exactamente? ¿Utilizo mapcontexto?

por ejemplo, mi nginx.conf se vería así

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;
}

Respuesta1

Su nginxconfiguración parece correcta en su mayoría, pero hay algunos cambios que puede realizar para asegurarse de que funcione como se esperaba.

Primero, debe definir la lista blanca real de dominios a los que se les permite acceder a las imágenes. En su configuración actual, ha definido dos dominios en la lista blanca como whitelist1y whitelist2. Debe reemplazarlos con los nombres de dominio reales a los que se les permite acceder a las imágenes.

En segundo lugar, en el contexto de su mapa, ha definido la variable $whitelistcomo el valor del subdominio que realiza la solicitud. Sin embargo, lo que realmente necesita es el valor del nombre de dominio que realiza la solicitud, sin el subdominio. Puede modificar el contexto de su mapa para extraer el nombre de dominio de la siguiente manera:

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

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

En el ejemplo anterior, la expresión regular captura el subdominio y el nombre de dominio por separado. Luego, la variable $domainse establece en el valor del nombre de dominio sin el subdominio.

Finalmente, puede usar la $whitelistvariable en su bloque de servidor para determinar si permite o deniega el acceso a las imágenes. Su configuración actualizada se vería así:

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;
  }
}

información relacionada