Pesquisa de site

Como configurar hosts virtuais baseados em nome e IP (blocos de servidor) com NGINX


Em um período relativamente curto desde que foi desenvolvido e disponibilizado (pouco mais de 10 anos), o Nginx experimentou um crescimento sustentado e constante entre os servidores web devido ao seu alto desempenho e baixo uso de memória.

Como o Nginx é um software gratuito e de código aberto, ele foi adotado por milhares de administradores de servidores web em todo o mundo, não apenas em servidores Linux e *nix, mas também no Microsoft Windows.

Não perca: hospedagem virtual Apache baseada em nome e IP

Para aqueles de nós mais acostumados com o Apache, o Nginx pode ter uma curva de aprendizado um tanto acentuada (pelo menos esse foi o meu caso), mas certamente compensa quando você configura alguns de sites e comece a ver as estatísticas de tráfego e uso de recursos.

Neste artigo explicaremos como usar o Nginx para configurar hospedagem virtual baseada em nome e baseada em IP em CentOS/RHEL 7 e Debian 8 e derivados, começando com Ubuntu 15.04 e seus derivados.

Nosso cenário de teste para este artigo é o seguinte:

  1. Sistema operacional: Servidor Debian 8 Jessie [IP 192.168.0.25]
  2. Gateway: Roteador [IP 192.168.0.1]
  3. Servidor Web: Nginx 1.6.2-5
  4. Domínios fictícios: www.tecmintlovesnginx.com e www.nginxmeanspower.com.

Instalando o servidor Web Nginx

Se ainda não o fez, instale o Nginx antes de prosseguir. Se precisar de ajuda para começar, uma pesquisa rápida por nginx neste site retornará vários artigos sobre este tópico. Clique no ícone da lupa no topo desta página e pesquise a palavra-chave nginx. Se você não sabe como pesquisar artigos neste site, não se preocupe, aqui adicionamos links para os artigos do nginx, basta navegar e instalá-lo de acordo com suas respectivas distribuições Linux.

  1. Instale e compile o Nginx a partir de fontes no RHEL/CentOS 7
  2. Instale o servidor Web Nginx no Debian 8
  3. Instale Nginx com MariaDB e PHP/PHP-FPM no Fedora 23
  4. Instale o servidor Web Nginx no servidor/desktop Ubuntu 15.10
  5. Diretórios de sites Nginx protegidos por senha

Então prepare-se para continuar com o restante deste tutorial.

Criando hosts virtuais baseados em nomes no Nginx

Como tenho certeza que você já sabe, um host virtual é um site servido pelo Nginx em um único VPS de nuvem ou servidor físico. No entanto, nos documentos do Nginx você encontrará o termo "blocos de servidor", mas eles são basicamente a mesma coisa chamada por nomes diferentes.

O primeiro passo para configurar hosts virtuais é criar um ou mais blocos de servidores (no nosso caso criaremos dois, um para cada domínio fictício) no arquivo de configuração principal (/etc/nginx/nginx.conf) ou dentro de /etc/nginx/sites-available.

Embora o nome dos arquivos de configuração neste diretório (sites-disponíveis) possa ser definido como você quiser, é uma boa ideia usar o nome dos domínios, e além disso optamos por adicionar o Extensão .conf para indicar que estes são arquivos de configuração.

Esses blocos de servidor podem ser relativamente complexos, mas em sua forma básica consistem no seguinte conteúdo:

Em /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

server {  
    listen       80;  
    server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
    access_log  /var/www/logs/tecmintlovesnginx.access.log;  
    error_log  /var/www/logs/tecmintlovesnginx.error.log error; 
        root   /var/www/tecmintlovesnginx.com/public_html;  
        index  index.html index.htm;  
}

Em /etc/nginx/sites-available/nginxmeanspower.com.conf:

server {  
    listen       80;  
    server_name  nginxmeanspower.com www.nginxmeanspower.com;
    access_log  /var/www/logs/nginxmeanspower.access.log;  
    error_log  /var/www/logs/nginxmeanspower.error.log error;
    root   /var/www/nginxmeanspower.com/public_html;  
    index  index.html index.htm;  
}

Você pode usar os blocos acima para começar a configurar seus hosts virtuais ou pode criar os arquivos com o esqueleto básico em /etc/nginx/sites-available/default (Debian ) ou /etc/nginx/nginx.conf.default (CentOS).

Depois de copiado, altere suas permissões e propriedade:

chmod 660  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chmod 660  /etc/nginx/sites-available/nginxmeanspower.com.conf

Debian e Derivados

chgrp www-data  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp www-data  /etc/nginx/sites-available/nginxmeanspower.com.conf

CentOS e RHEL

chgrp nginx  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp nginx  /etc/nginx/sites-available/nginxmeanspower.com.conf

Quando terminar, você deve excluir o arquivo de amostra ou renomeá-lo para outro nome para evitar confusão ou conflitos.

Observe que você também precisará criar o diretório para os logs (/var/www/logs) e fornecer ao usuário Nginx (nginx ou www-data , dependendo se você está executando CentOS ou Debian) permissões de leitura e gravação sobre ele:

mkdir /var/www/logs
chmod -R 660 /var/www/logs
chgrp <nginx user> /var/www/logs

Os hosts virtuais agora devem ser habilitados criando um link simbólico para este arquivo no diretório habilitado para sites:

ln -s /etc/nginx/sites-available/tecmintlovesnginx.com.conf /etc/nginx/sites-enabled/tecmintlovesnginx.com.conf
ln -s /etc/nginx/sites-available/nginxmeanspower.com.conf /etc/nginx/sites-enabled/nginxmeanspower.com.conf

Em seguida, crie um arquivo HTML de amostra chamado index.html dentro de /var/www//public_html para cada um dos hosts virtuais (substitua conforme necessário). Modifique o seguinte código conforme necessário:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Tecmint loves Nginx</title>
  </head>
  <body>
  <h1>Tecmint loves Nginx!</h1>
  </body>
</html>

Por fim, teste a configuração do Nginx e inicie o servidor web. Se houver algum erro na configuração, você será solicitado a corrigi-lo:

nginx -t && systemctl start nginx

e adicione as seguintes entradas ao seu arquivo /etc/hosts em sua máquina local como uma estratégia básica de resolução de nomes:

192.168.0.25 tecmintlovesnginx.com
192.168.0.25 nginxmeanspower.com

Em seguida, inicie um navegador da web e acesse os URLs listados acima:

Para adicionar mais hosts virtuais no Nginx, basta repetir as etapas descritas acima quantas vezes forem necessárias.

Hosts virtuais baseados em IP no Nginx

Ao contrário dos hosts virtuais baseados em nomes, onde todos os hosts são acessíveis através do mesmo endereço IP, os hosts virtuais baseados em IP exigem um IP:porta diferente. combinação cada.

Isso permite que o servidor web retorne sites diferentes dependendo do endereço IP e da porta onde a solicitação é recebida. Como os hosts virtuais baseados em nome nos dão a vantagem de compartilhar um endereço IP e uma porta, eles são o padrão para servidores web de uso geral e devem ser a configuração preferida, a menos que sua versão instalada do Nginx não suporte Indicação de nome de servidor (SNI), seja porque é uma versão REALMENTE desatualizada, ou porque foi compilada sem a opção de compilação –with-http_ssl_module.

Se,

nginx -V

não retorna as opções destacadas abaixo:

você precisará atualizar sua versão do Nginx ou recompilá-lo, dependendo do método de instalação original. Para compilar o Nginx, siga o artigo abaixo:

  1. Instale e compile o Nginx a partir de fontes no RHEL/CentOS 7

Supondo que estamos prontos, precisamos observar que outro pré-requisito para hosts virtuais baseados em IP é a disponibilidade de IPs separados – seja atribuindo-os a interfaces de rede distintas, ou através do uso de IPs virtuais. IPs (também conhecidos como alias de IP).

Para realizar o alias de IP no Debian (supondo que você esteja usando eth0), edite /etc/network/interfaces como segue:

Debian e Derivados

auto eth0:1
iface eth0:1 inet static
        address 192.168.0.25
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
auto eth0:2
iface eth0:2 inet static
        address 192.168.0.26
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

No exemplo acima, criamos duas NICs virtuais a partir de eth0: eth0:1 (192.168.0.25) e eth0:2 (192.168.0.26).

CentOS e RHEL

No CentOS, renomeie /etc/sysconfig/network-scripts/ifcfg-enp0s3 como ifcfg-enp0s3:1 e faça uma cópia como ifcfg-enp0s3:2, e depois basta alterar as seguintes linhas, respectivamente:

DEVICE="enp0s3:1"
IPADDR=192.168.0.25

e

DEVICE="enp0s3:2"
IPADDR=192.168.0.26

Feito isso, reinicie o serviço de rede:

systemctl restart networking

A seguir, faça as seguintes alterações nos blocos de servidor definidos anteriormente neste artigo:

Em /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

listen 192.168.0.25:80

Em /etc/nginx/sites-available/nginxmeanspower.com.conf:

listen 192.168.0.26:80

Finalmente, reinicie o Nginx para que as alterações tenham efeito.

systemctl restart nginx

e não se esqueça de atualizar seu /etc/hosts local adequadamente:

192.168.0.25 tecmintlovesnginx.com
192.168.0.26 nginxmeanspower.com

Assim, cada solicitação feita para 192.168.0.25 e 192.168.0.26 na porta 80 retornará tecmintlovesnginx.com e nginxmeanspower.com, respectivamente:

Como você pode ver nas imagens acima, agora você tem dois hosts virtuais baseados em IP usando a única NIC em seu servidor com dois aliases de IP diferentes.

Resumo

Neste tutorial, explicamos como configurar hosts virtuais baseados em nome e baseados em IP no Nginx. Embora você provavelmente queira usar a primeira opção, é importante saber que a outra opção ainda estará disponível se você precisar dela – apenas certifique-se de tomar essa decisão depois de considerar os fatos descritos neste guia.

Além disso, você pode querer marcar os documentos do Nginx, pois vale a pena consultá-los com frequência ao criar blocos de servidor (aí está - estamos falando na linguagem Nginx agora) e configurá-los. Você não vai acreditar em todas as opções disponíveis para configurar e ajustar este excelente servidor web.

Como sempre, não hesite em nos enviar uma mensagem usando o formulário abaixo se tiver alguma dúvida ou comentário sobre este artigo. Estamos ansiosos para ouvir sua opinião e seus comentários sobre este guia são muito bem-vindos.