arquivos de configuração nginx “concorrentes”

1

Eu tenho um servidor que hospeda com sucesso vários domínios usando o nginx. Cada domínio tem um arquivo de configuração separado do nginx.

Um domínio, vamos chamá-lo exemplo.com é o servidor padrão

Tem um arquivo de configuração assim:

# config file for example.com
#
#redirects all www to NON-www
#

server {
    listen 80;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
    }

server {
    listen 80 default_server;
    server_name example.com;
    charset utf-8;
    root /blah/example.com/public/www;

Isso funciona muito bem - até eu adicionar um segundo arquivo de configuração para vários "redirecionamentos administrativos" para pastas e subdomínios do mesmo domínio.

Eu fiz isso porque esse domínio é bem antigo e tinha vários aplicativos e sites em subdiretórios antes que os domínios fossem comprados para eles. Na chance de que alguns usuários tenham favoritos antigos, queremos garantir que eles ainda funcionem.

Eu gostaria de manter esses redirecionamentos em um arquivo de configuração nginx separado para facilitar a supervisão.

Então aqui está o segundo arquivo de configuração (simplificado para fins de discussão):

# config file for Administrative_Redirects.example.com
#redirects Webmin and/or Panel request to proper port and https
#

server {
    listen 80;
    server_name webmin.example.com;
    return https://webmin.example.com:10000;
    }

server {
    listen 80;
    server_name panel.example.com;
    return https://webmin.example.com:10000;
    }


#------------------------------------------------------------------------
#
#redirects all Webmail and related cPanel requests to XYZ account
#

server {
    listen 80;
    server_name webmail.example.com;
    return https://3rdPartyMail.com:port;
    }

server {
    listen 80;
    server_name www.webmail.example.com;
    return https://3rdPartyMail.com:port;
    }


server {
    listen 80;
    server_name cpanel.example.com;
    return https://AnotherDomain.com:port;
    }


#------------------------------------------------------------------------
#
#redirects subdirs to proper domains and/or subdomains
#

# ~*/(regex_case-INSensitive)

server {
    listen 80;
    server_name example.com;

    # some_app
    location ~*/(some_folder)
        {
        return 301 $scheme://SomeOtherDomain.com;
        }

    # another_app
    location ~*/(another_folder)
        {
        return 301 $scheme://AnotherDomain.com;
        }

    # Some_Name
    location ~*/(some_name)
        {
        return 301 $scheme://some_name.example.com;
        }

    }


# strip www subdomain

server {
    listen 80;
    server_name www.example.com;

    # some_app
    location ~*/(some_folder)
        {
        return 301 $scheme://SomeOtherDomain.com;
        }

    # another_app
    location ~*/(another_folder)
        {
        return 301 $scheme://AnotherDomain.com;
        }

    # Some_Name
    location ~*/(some_name)
        {
        return 301 $scheme://some_name.example.com;
        }
    }

# -----------

Meus dois problemas:

  1. SE este arquivo de configuração para "Administrative_Redirects.example.com" estiver ativo, tudo dentro dele será bem resolvido, MAS a navegação para example.com ou www.example.com resultará em 404.

  2. Navegar para any_made-up_subdomain.example.com (ou seja, qualquer coisa que NÃO esteja especificada no arquivo de configuração de "Administrative_Redirects.example.com") serve a raiz do documento (ou seja, root /blah/example.com/public/www; ). . . mas provavelmente deve resultar em 404

O problema parece vir das seguintes seções no arquivo de configuração de "Administrative_Redirects.example.com"

#-------
server {
    listen 80;
    server_name example.com;
#-------

and

#-------
server {
    listen 80;
    server_name www.example.com;
#-------

Estes parecem "antecipar" o arquivo de configuração default_server que classifica mais tarde na lista de sites nginx ativos.

Como posso manter o "Administrative_Redirects.example.com" de atropelar o arquivo de configuração nginx default_server?

Existe uma maneira melhor de fazer isso, mantendo os redirecionamentos em um arquivo separado?

Posso, por exemplo, incluir esses "redirecionamentos administrativos" no arquivo de configuração default_server para não ter uma bagunça tão grande lá?

Agradecemos antecipadamente por qualquer insight!

    
por FBachofner 19.10.2017 / 10:34

1 resposta

0

Você deve estar usando uma diretiva include no arquivo principal para incluir o arquivo de redirecionamentos.

Arquivo principal para example.com

...

server {
    listen 80 default_server;
    server_name example.com;
    charset utf-8;
    root /blah/example.com/public/www;

    # add this line
    include redirects.conf;
}

Em seguida, coloque todos os redirecionamentos sem um bloco server em redirects.conf :

# some_app
location ~*/(some_folder) {
    return 301 $scheme://SomeOtherDomain.com;
}

# another_app location ~*/(another_folder) {
    return 301 $scheme://AnotherDomain.com;
}

# Some_Name
location ~*/(some_name) {
    return 301 $scheme://some_name.example.com;
}

OBSERVAÇÃO: Resposta digitada no meu telefone enquanto segura um bebê dormindo, então assuma erros de sintaxe.

    
por 19.10.2017 / 23:30

Tags