Redireciona muitos domínios para diferentes localizações de outro domínio com nginx sem ter que definir muitos blocos de servidores

1

Digamos que eu tenha várias variações em um nome de domínio, um brandname registrado em vários domínios de nível superior; e todos eles precisam ir para um domínio específico + anexar um uri personalizado dedicado relacionado ao domínio originalmente solicitado.

Por exemplo, eu tenho:

  • domain.tld
  • domain.net
  • domain.org
  • domain.com

Onde domain.com é aquele em que todas as solicitações precisam ser anexadas após acrescentar um uri extra como este:

  • domain.com/tld
  • domain.com/net
  • domain.com/org

Eu criei esta configuração de trabalho:

# (www.)domain.tld
server {

        listen 80;
        server_name domain.tld www.domain.tld;
        return 301 $scheme://www.domain.com/tld$request_uri;
}

# (www.)domain.net
server {

        listen 80;
        server_name domain.net www.domain.net;
        return 301 $scheme://www.domain.com/net$request_uri;
}

# (www.)domain.org
server {

        listen 80;
        server_name domain.org www.domain.org;
        return 301 $scheme://www.domain.com/org$request_uri;
}


# (www.)domain.com
server {

        listen 80;
        server_name domain.org www.domain.org;

        location / {
               proxy_set_header        Host $host;
               proxy_set_header        X-Real-IP $remote_addr;
               proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_pass              http://backend.host:port;
          }

}

Mas a declaração de vários blocos server , embora lógicos, parece excessivamente detalhada.

TL; DR Existem maneiras de realizar esse tipo de redirecionamento sem ter que definir um bloco servidor para cada domínio?

    
por Jake 10.01.2017 / 15:42

1 resposta

2

Uma expressão regular server_name directive pode capturar o último elemento do nome de domínio para uso no redirecionamento. Por exemplo:

server {
    listen 80;
    server_name ~\.(?<tld>[^.]+)$;
    return 301 $scheme://www.domain.com/$tld$request_uri;
}

Veja este documento para detalhes.

    
por 10.01.2017 / 16:35