Como Servir Subdomínios ou Múltiplos Domínios no NGINX

Você tem um servidor com um único endereço IP público, mas precisa hospedar vários domínios ou subdomínios? O que você faria? Este cenário pode ser confuso se você for um iniciante. Mas não se preocupe, este tutorial tem tudo o que você precisa, para que você possa servir um subdomínio NGINX e vários domínios.

Neste tutorial, você aprenderá como servir efetivamente subdomínios NGINX ou vários domínios em um servidor com um único endereço IP!

Se estiver pronto, é hora de começar!

Pré-requisitos

Este tutorial vem com demonstrações práticas, mas não requer muitos pré-requisitos e assumirá que você tem um Ubuntu Server LTS com SSH habilitado e o NGINX instalado. As demonstrações neste tutorial são feitas no Ubuntu Server LTS 20.04.1.

Configurando Registros DNS

Antes de poder servir subdomínios NGINX ou vários domínios, você precisará adicionar um registro A em um painel de controle DNS. O registro A vincula e aponta todos os domínios e subdomínios para um único endereço IP para que os navegadores da web possam encontrar seu site.

1. Inicie o seu navegador da web favorito e faça login no painel de controle do seu DNS.

2. Clique em Adicionar Registro para começar a adicionar registros A. Seu navegador será redirecionado para uma página onde você configurará as configurações DNS para o seu domínio e subdomínios.

Adding an A Record

Agora, configure as configurações DNS com o seguinte:

Selecione o registro A no campo Tipo.

Insira @ no campo Host, e o IP do seu servidor no campo Valor.

Selecione o valor desejado no campo TTL, em seguida, clique no botão Confirmar para salvar as configurações.

Repita o mesmo processo para outros subdomínios.

Configuring DNS settings for Domain and Subdomains The final DNS Settings page looks like the one below.

A página final de Configurações de DNS se parece com a abaixo.

Viewing DNS Settings Page

O painel de controle do seu registro DNS pode variar em funcionalidade e design, mas os mesmos princípios se aplicarão a todos.

Configurando Diretórios Web para o Domínio e Subdomínios NGINX

Agora que você adicionou registros A para o seu domínio e subdomínios, é hora de configurar seus diretórios web. O NGINX vem com um arquivo de host virtual padrão e está configurado para servir um diretório web localizado em /usr/share/nginx/html.

Você criará um diretório web separado para cada domínio dentro da raiz de documentos padrão do NGINX (/var/www/html).

1. Primeiro, abra seu terminal e execute os comandos abaixo para criar diretórios web para todos os domínios e subdomínios. Isso separa, organiza e isola arquivos para cada site.

sudo mkdir /var/www/html/awstutorial.net
sudo mkdir /var/www/html/web1.awstutorial.net
sudo mkdir /var/www/html/web2.awstutorial.net

2. Em seguida, execute o comando chown para alterar recursivamente (-R) a propriedade de cada diretório criado na etapa um para o usuário e grupo www-data. Você está alterando a propriedade de cada diretório para o usuário e grupo www-data porque o NGINX é executado como um usuário www-data.

sudo chown -R www-data:www-data /var/www/html/awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web1.awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web2.awstutorial.net

3. Crie um arquivo chamado index.html no seu editor de código preferido e, em seguida, copie/cole o código abaixo para o arquivo index.html. Salve o arquivo dentro do diretório web principal de seus domínios (/var/www/html/awstutorial.net).

O código HTML abaixo exibe uma mensagem que diz “Parabéns! O site awstutorial.net está funcionando!” quando o arquivo index.html é aberto em um navegador da web.

<html>
	<head>
	  <title>Welcome to awstutorial.net!</title>
  </head>
	  <body>
	    <h1>Congratulations! The awstutorial.net website is working!</h1>
    </body>
</html>

4. Finalmente, crie o mesmo index.html nos diretórios /var/www/html/web1.awstutorial.net e /var/www/html/web2.awstutorial.net. Mas substitua awstutorial.net por web1.awstutorial.net e web2.awstutorial.net no código de cada index.html conforme necessário.

Configurando Host Virtual para Domínio e Subdomínios NGINX

Você já possui uma página index.html para seu domínio e subdomínios para serem servidos por meio de um servidor web NGINX. O próximo passo é criar um arquivo de configuração de host virtual NGINX para cada domínio para servir as páginas HTML.

1. Crie um arquivo de configuração de host virtual NGINX chamado awstutorial.net no seu editor de código preferido e depois copie/cole o código abaixo para esse arquivo. Salve o arquivo no diretório /etc/nginx/sites-available/.

O código abaixo controla o comportamento do seu servidor, como o nome do servidor e a página de índice (home) quando um usuário tenta acessar seu domínio.

server {
        # Vincula à porta TCP 80.
        listen 80; 

				# Diretório raiz usado para procurar um arquivo
        root /var/www/html/awstutorial.net;
				# Define o arquivo a ser usado como página de índice
        index index.html index.htm;
				# Define o nome de domínio ou subdomínio. 
        # Se nenhum server_name for definido em um bloco de servidor então 
				# O Nginx usa o nome 'empty'
        server_name awstutorial.net;

        location / {
            # Retorna um erro 404 para instâncias quando o servidor recebe 
						# pedidos para arquivos e diretórios não rastreáveis.
            try_files $uri $uri/ =404;
        }
    }

2. Em seguida, execute o seguinte comando nginx para verificar (-t) o arquivo de configuração NGINX para qualquer erro de sintaxe.

sudo nginx -t

Se nenhum erro de sintaxe for encontrado no arquivo de configuração NGINX, você obterá a seguinte saída.

Verifying NGINX configuration file

3. Em seguida, execute o comando abaixo para criar um link simbólico (`ln -s`) do diretório /etc/nginx/sites-available para o diretório /etc/nginx/sites-enabled/. Este comando habilita o arquivo de configuração do host virtual awstutorial.net.

sudo ln -s /etc/nginx/sites-available/awstutorial.net /etc/nginx/sites-enabled/

O formato sites-available e sites-enabled são padrão em uma instalação do NGINX no Ubuntu, mas outras distribuições podem utilizar um padrão diferente.

4. Repita os passos um a três para criar arquivos de configuração de host virtual do NGINX nomeados web1.awstutorial.net e web2.awstutorial.net.

Altere as seguintes linhas em cada arquivo de configuração de host virtual do NGINX:

  • Substitua a linha root /var/www/html/awstutorial.net pelo diretório raiz de cada subdomínio (root /var/www/html/web1.awstutorial.net e root /var/www/html/web2.awstutorial.net).
  • Substitua a linha server_name awstutorial.net pelo nome de cada subdomínio (server_name web1.awstutorial.net e server_name web2.awstutorial.net).

5. Agora execute os comandos sudo ln abaixo como fez no passo três para habilitar os arquivos de configuração do host virtual.

# Ativa o arquivo de configuração do host virtual NGINX para web1.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web1.awstutorial.net /etc/nginx/sites-enabled/
# Ativa o arquivo de configuração do host virtual NGINX para web2.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web2.awstutorial.net /etc/nginx/sites-enabled/

6. Execute o comando systemctl abaixo para reiniciar o serviço NGINX (restart nginx) e aplicar todas as alterações de configuração.

sudo systemctl restart nginx

7. Por fim, acesse os URLs do domínio e subdomínios em seu navegador para testar se os sites estão funcionando corretamente.

Se o domínio e subdomínios carregarem, você verá uma mensagem semelhante à seguinte.

Verifying websites are loading through the web browser.

Configurando HTTPS no Domínio e Subdomínio do NGINX

Você configurou e testou com sucesso um domínio e subdomínios do NGINX no protocolo HTTP, o que é ótimo. No entanto, é necessário garantir a segurança da conexão do seu domínio e subdomínios ativando o HTTPS. Como? Com um certificado que você obterá de uma Autoridade de Certificação, como Let’s Encrypt SSL.

1. Primeiro, execute o comando abaixo para instalar o pacote de software Certbot (apt-get install certbot). O Certbot permite baixar um certificado SSL para o seu domínio e subdomínios.

sudo apt-get install certbot python3-certbot-nginx -y

2. Em seguida, execute o comando certbot abaixo para baixar um certificado SSL (certonly) para o seu domínio (-d awstutorial.net). Observe que você concorda com os termos de serviço (--agree-tos) com seu endereço de e-mail (--email).

sudo certbot certonly --agree-tos --email [email protected] -d awstutorial.net

Substitua o e-mail pelo seu próprio.

3. Digite ‘1’ para selecionar o plugin do Servidor Web NGINX (nginx) para autenticar com o ACME CA, conforme mostrado abaixo.

Selecting Plugin to Authenticate with ACME CA

Após selecionar o plugin do Servidor Web NGINX, você verá o progresso do download do certificado SSL para o seu domínio (awstutorial.net).

Por padrão, os certificados SSL do Let’s Encrypt são armazenados no diretório /etc/letsencrypt/live/.

Showing Download Progress of the SSL Certificate

4. Agora execute cada comando abaixo como você fez no passo dois para baixar certificados SSL para os subdomínios restantes (web1.awstutorial.net e web2.awstutorial.net).

sudo certbot certonly --agree-tos --email [email protected] -d web1.awstutorial.net
sudo certbot certonly --agree-tos --email [email protected] -d web2.awstutorial.net

5. Por fim, execute o comando ls abaixo para listar todos os certificados SSL no diretório /etc/letsencrypt/live/ que contêm (*) o awstutorial.net em seus nomes. Fazendo isso, você verifica se os certificados SSL existem.

ls /etc/letsencrypt/live/*awstutorial.net/

Abaixo, você verá os certificados SSL para o seu domínio e subdomínios.

Showing SSL certificate for all domains.

Configurando o Virtual Host do NGINX para Usar Certificados SSL

Neste ponto, você já tem certificados SSL à sua disposição. Mas como você os usa para proteger seu domínio e subdomínios? Você definirá o caminho dos certificados no bloco server de cada arquivo de configuração de host virtual do NGINX.

1. Abra o arquivo de configuração do host virtual do NGINX para awstutorial.net, que está no diretório /etc/nginx/sites-available/, no seu editor de código preferido.

2. Substitua o conteúdo do arquivo pelo código abaixo, onde você define o caminho do certificado SSL do seu domínio e o protocolo SSL (sob Caminho do certificado SSL).

server {
	     # Liga a porta TCP 80.
       listen 80;
	     # Define o nome do domínio ou subdomínio.
       # Se nenhum server_name estiver definido em um bloco de servidor, então
	     # Nginx usa o nome 'vazio'.
       server_name awstutorial.net;
	     # Redireciona o tráfego para o
	     # bloco de servidor HTTPS correspondente com o código de status 301.
       return 301 https://$host$request_uri;
       }

server {
        # Liga a porta TCP 443 e habilita SSL.
        listen 443 SSL;
	      # Diretório raiz usado para buscar um arquivo.
	      root /var/www/html/awstutorial.net; 
	      # Define o nome do domínio ou subdomínio.
        # Se nenhum server_name estiver definido em um bloco de servidor, então
	      # Nginx usa o nome 'vazio'.
        server_name awstutorial.net;

	      # Caminho do certificado SSL.
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # Usa o arquivo gerado pelo comando certbot.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # Define o caminho do arquivo dhparam.pem.
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # Retorna um erro 404 para casos em que o servidor recebe
	      # solicitações para arquivos e diretórios não rastreáveis.
        try_files $uri $uri/ =404;
        }

    }

3. Repita o mesmo processo (passos um a dois) para os arquivos de configuração restantes do host virtual (web1.awstutorial.net e web2.awstutorial.net). Mas certifique-se de substituir o caminho do certificado SSL pelo caminho do certificado de subdomínio (em Caminho do certificado SSL).

4. Agora, execute novamente o comando systemctl abaixo para reiniciar o serviço NGINX e aplicar as alterações de configuração.

sudo systemctl restart nginx

5. Por fim, acesse os URLs do seu domínio e subdomínio no seu navegador da web. Mas desta vez, em vez do protocolo HTTP, use HTTPS para ver se funcionam.

Abaixo, você pode ver um ícone de cadeado na barra de endereço, o que indica que o site está seguro com seu certificado SSL.

Verifying Domain is Secure

Conclusão

Neste tutorial, você aprendeu como servir um subdomínio do NGINX ou vários domínios configurando um arquivo de configuração de host virtual. Você também abordou a segurança de seus domínios com um certificado SSL que você também define no arquivo de configuração de host virtual.

Agora, por que não usar essa configuração em um ambiente de produção, como para hospedar vários aplicativos em um único servidor, e fornecer hospedagem web acessível?

Source:
https://adamtheautomator.com/nginx-subdomain/