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? Esse cenário pode ser confuso se você é um iniciante. Mas não se preocupe, este tutorial vai te ajudar, 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 você está pronto, vamos começar!

Pré-requisitos

Este tutorial inclui demonstrações práticas, mas não requer muitos pré-requisitos e pressupõe que você tenha um Ubuntu Server LTS com SSH habilitado e NGINX instalado. As demonstrações deste tutorial são baseadas 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 de DNS. O registro A vincula e aponta todos os domínios e subdomínios para um único endereço IP, permitindo que os navegadores encontrem seu site.

1. Abra 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 de DNS para seu domínio e subdomínios.

Adding an A Record

Agora, configure as configurações de 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, depois 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

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

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

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

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

1. Primeiro, abra o seu terminal e execute os comandos abaixo para criar diretórios web para todos os domínios e subdomínios. Fazendo isso, separa, organiza e isola os 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, já que 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 dos 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 o Host Virtual para Domínio e Subdomínios NGINX

Você já possui uma página index.html para o 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 do 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, em seguida, copie/colecione 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 inicial quando um usuário tenta acessar seu domínio.

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

				# Diretório raiz usado para procurar por 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 do domínio ou subdomínio. 
        # Se nenhum server_name for definido em um bloco de servidor, então 
				# o Nginx usa o nome 'vazio'
        server_name awstutorial.net;

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

2. Em seguida, execute o seguinte comando nginx para verificar (-t) o arquivo de configuração do NGINX em busca de erros de sintaxe.

sudo nginx -t

Se nenhum erro de sintaxe for encontrado no arquivo de configuração do 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/. Esse 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/

Os formatos sites-available e sites-enabled são padrão em uma instalação NGINX no Ubuntu, mas outras distribuições podem usar um padrão diferente.

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

Altere as seguintes linhas em cada arquivo de configuração de host virtual 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 à abaixo.

Verifying websites are loading through the web browser.

Configurando o 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 proteger a 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) inserindo 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 autenticação com a 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 da 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 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. Isso permite verificar a existência dos certificados SSL.

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á possui certificados SSL à sua disposição. Mas como você os utiliza 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 NGINX.

1. Abra o arquivo de configuração do host virtual NGINX para awstutorial.net localizado 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 (em Caminho do certificado SSL).

server {
	     # Vincula a porta TCP 80.
       listen 80;
	     # Define o nome do domínio ou subdomínio. 
       # Se nenhum server_name for definido em um bloco de servidor, então 
	     # 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
	     # Vincula a porta TCP 443 e ativa o SSL.
       return 301 https://$host$request_uri;
       }

server {
        # Define o diretório raiz usado para procurar um arquivo        
        listen 443 SSL;
	      # Define o nome do domínio ou subdomínio. 
	      root /var/www/html/awstutorial.net; 
	      # Se nenhum server_name for definido em um bloco de servidor, então 
        # o Nginx usa o nome 'vazio'
	      # Caminho do certificado SSL
        server_name awstutorial.net;

	      # Use o arquivo gerado pelo comando certbot.
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # Define o caminho do arquivo dhparam.pem.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # Retorna um erro 404 para casos em que o servidor recebe 
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # 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 de host virtual restantes (web1.awstutorial.net e web2.awstutorial.net). Mas certifique-se de substituir o caminho do certificado SSL pelo caminho do certificado do seu 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, navegue para os URLs do seu domínio e subdomínio em seu navegador da web. Mas desta vez, em vez do protocolo HTTP, use HTTPS para verificar se eles 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 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 definiu no arquivo de configuração de host virtual.

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

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