Como eu lidaria com a lista de permissões de domínio?

Como eu lidaria com a lista de permissões de domínio?

Estou tentando descobrir como lidaria com a inclusão de determinados nomes de domínio na lista de permissões. Se a solicitação for originada de um subdomínio específico, como <id>.domain-name.com, o acesso às imagens será restrito a uma lista de permissões de domínios aprovados. Solicitações de domínios que não estão na lista de permissões resultarão em um erro 403.

Não tenho certeza do que devo fazer exatamente? Eu uso mapcontexto?

por exemplo, meu nginx.conf seria parecido com isto

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

Responder1

Sua nginxconfiguração parece correta, mas há algumas alterações que você pode fazer para garantir que funcione conforme o esperado.

Primeiro, você precisa definir a lista de permissões real de domínios que têm permissão para acessar as imagens. Na sua configuração atual, você definiu dois domínios na lista de permissões como whitelist1e whitelist2. Você deve substituí-los pelos nomes de domínio reais que têm permissão para acessar as imagens.

Segundo, no contexto do seu mapa, você definiu a variável $whitelistcomo o valor do subdomínio que está fazendo a solicitação. Porém, o que você realmente precisa é do valor do nome de domínio que está fazendo a solicitação, sem o subdomínio. Você pode modificar o contexto do seu mapa para extrair o nome de domínio da seguinte maneira:

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

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

No exemplo acima, a expressão regular captura o subdomínio e o nome de domínio separadamente. A variável $domainé então definida com o valor do nome de domínio sem o subdomínio.

Finalmente, você pode usar a $whitelistvariável em seu bloco de servidor para determinar se deseja permitir ou negar acesso às imagens. Sua configuração atualizada ficaria assim:

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

informação relacionada