Blocos de servidor Nginx: subdomínios vs caminhos

Blocos de servidor Nginx: subdomínios vs caminhos

Qual é a diferença entre subdomínios e caminhos de localização
exemplo:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name xxxx.yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }

}

ou

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }
    location /xxxx/ {

        proxy_pass http://127.0.0.1:4000;

    }

}

obviamente o nível de separação é diferente, o primeiro é separado nos servidores DNS e o segundo a direção da solicitação acontece no próprio nginx. o que estou curioso para saber é quais são as precauções de escolher uma solução em vez de outra.

Responder1

Você pode dizer ao NGINX para responder a todas as solicitações em um endereço IP ou porta, se desejar. Subdomínios/domínios na configuração apenas limitam as respostas de um bloco de configuração de "servidor" específico.

A localização temnadatem a ver com domínios/subdomínios, exceto que eles vivem de tudo o que está configurado no bloco do servidor. Geralmente para NGINX, a primeira coisa que você faz é configurar seus domínios e IP para escuta e depois esquecer isso completamente.

Seu primeiro exemplo configura xxxx.yyy.com=>http://127.0.0.1:3000

Segundo exemplo configurado yyy.com/xxxx=>http://127.0.0.1:4000

Você pode combinar o exemplo nº 1 com o exemplo nº 2, colocando o domínio base e o subdomínio no bloco de servidor nº 2 (se você não se importa que ambos os caminhos funcionem tanto para o domínio base quanto para o subdomínio):


server {

    listen 80 default_server;
    listen [::]:80 default_server;

    server_name yyy.com xxxx.yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }

    location /xxxx/ {

        proxy_pass http://127.0.0.1:4000;

    }
}

Então você pode ver que não há "separação no DNS", como você diz - a menos que você os hospede em endereços IP diferentes. Sua única separação está nos caminhos.

O exemplo combinado produz:

xxxx.yyy.com=>http://127.0.0.1:3000

yyy.com=>http://127.0.0.1:3000

yyy.com/xxxx=>http://127.0.0.1:4000

xxxx.yyy.com/xxxx=>http://127.0.0.1:4000

Subdomínios não são caminhos. São coisas totalmente diferentes. Portanto, tentar compará-los e contrastá-los sugere que você está muito errado em sua compreensão.

Talvez você tenha tido um subdomínio em algum lugar no passado onde tinha um diretório para um subdomínio e outro diretório para o domínio principal. Estes são os seus docroots, e é assim que algumas ferramentas de administração de servidor baseadas na Web configuram as coisas por padrão. Não há associação inerente entre subdomínios e caminhos, a menos que você (ou alguma ferramenta ou administrador de sistema) crie uma.

Você pode mapear qualquer domínio ou subdomínio - ou qualquer caminho definido em um bloco de localização - para /any/path/you/want em seu sistema de arquivos.

Localização tem tudo a ver com PATHS... e aqui novamente, depois que o NGINX encontrou uma solicitação que corresponde ao bloco do servidor, ele está observando as solicitações que correspondem ao caminho na solicitação HTTP.

/thispath /thatpath /foo /bar ou /foo/bar/on/thatpath ou você pode usar curingas e expressões regulares. Você pode configurar diferentes extensões de arquivo para serem veiculadas em diretórios diferentes, ou um uso comum de localização é informar ao NGINX como lidar com certos tipos de arquivo, como PHP.

Vários exemplos de configurações são fornecidos aqui:http://nginx.org/en/docs/beginners_guide.html

Se você achar isso útil, vote positivamente ou marque como uma solução. Obrigado!

Responder2

Como o tópico é configuração do nginx, não há separação de nível de DNS se ambos os domínios apontarem para o mesmo IP/servidor.
A diferença é em quais domínios estão quais caminhos disponíveis/manuseados.
Você pode configurar vários domínios com os mesmos locais, mas com um domínio diferente. Esse é o principal uso do server_name.

locationos blocos são a parte do URL após o nome de domínio/IP.
http://www.example.com/location/ Você pode disponibilizar diferentes caminhos locais em diferentes blocos/URLs de localização.

O que você pode conseguir com o DNS é diferente da configuração do nginx.
O round robin de DNS torna possível o balanceamento de carga e a alta disponibilidade.
A resolução baseada em localização geográfica permite uma entrega mais rápida de conteúdo.

Realmente depende do que você deseja alcançar.

informação relacionada