Pesquisa de site

Como instalar o Nginx com hosts virtuais e certificado SSL


Nginx (abreviação de Engine-x) é um servidor HTTP e proxy reverso gratuito, de código aberto, poderoso, de alto desempenho e escalonável, um proxy TCP/UDP padrão e de correio servidor. É fácil de usar e configurar, com uma linguagem de configuração simples. Nginx é agora o software de servidor web preferido para alimentar sites muito carregados, devido à sua escalabilidade e desempenho.

Neste artigo discutiremos como usar o Nginx como um servidor HTTP, configurá-lo para servir conteúdo da web e configurar hosts virtuais baseados em nomes e criar e instalar SSL para transmissões seguras de dados, incluindo um certificado autoassinado no Ubuntu e CentOS .

Como instalar o servidor Web Nginx

Primeiro comece instalando o pacote Nginx dos repositórios oficiais usando seu gerenciador de pacotes conforme mostrado.

------------ On Ubuntu ------------ 
sudo apt update 
sudo apt install nginx 

------------ On CentOS ------------
sudo yum update 
sudo yum install epel-release 
sudo yum install nginx 

Após a instalação do pacote Nginx, você precisa iniciar o serviço por enquanto, habilitá-lo para inicialização automática no momento da inicialização e visualizar seu status, usando os seguintes comandos. Observe que no Ubuntu ele deve ser iniciado e habilitado automaticamente enquanto o pacote é pré-configurado.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

Neste ponto, o servidor web Nginx deve estar instalado e funcionando, você pode verificar o status com o comando netstat.

sudo netstat -tlpn | grep nginx

Se o seu sistema tiver um firewall ativado, você precisará abrir as portas 80 e 443 para permitir o tráfego HTTP e HTTPS respectivamente, através dele, correndo.

------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload 

O método ideal para testar a instalação do Nginx e verificar se ele está funcionando e é capaz de servir páginas da web é abrindo um navegador da web e apontando para o IP do servidor.

http://Your-IP-Address
OR
http://Your-Domain.com

Uma instalação funcional deve ser indicada pela tela a seguir.

Como configurar o servidor Web Nginx

Os arquivos de configuração do Nginx estão localizados no diretório /etc/nginx e o arquivo de configuração global está localizado em /etc/nginx/nginx.conf no CentOS e no Ubuntu.

O Nginx é composto por módulos controlados por diversas opções de configuração, conhecidas como diretivas. Uma diretiva pode ser simples (no formato nome e valores terminados com ;) ou bloco (tem instruções extras entre {}). E uma diretiva de bloco que contém outras diretivas é chamada de contexto.

Todas as diretivas são explicadas de forma abrangente na documentação do Nginx no site do projeto. Você pode consultá-lo para obter mais informações.

Como servir conteúdo estático usando Nginx no modo autônomo

Em um nível básico, o Nginx pode ser usado para servir conteúdo estático, como HTML e arquivos de mídia, em modo autônomo, onde apenas o bloco de servidor padrão é usado (análogo ao Apache, onde nenhum host virtual foi configurado).

Começaremos explicando brevemente a estrutura de configuração do arquivo de configuração principal.

 
sudo vim /etc/nginx/nginx.conf

Se você olhar neste arquivo de configuração Nginx, a estrutura de configuração deve aparecer como segue e é chamada de contexto principal, que contém muitas outras diretivas simples e de bloco. Todo o tráfego da web é tratado no contexto http.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

A seguir está um exemplo de arquivo de configuração principal do Nginx (/etc/nginx/nginx.conf), onde o bloco http acima contém uma diretiva de inclusão que informa ao Nginx onde encontrar os arquivos de configuração do site (configurações de host virtual) .

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Observe que no Ubuntu, você também encontrará uma diretiva de inclusão adicional (include /etc/nginx/sites-enabled/*;), onde o diretório /etc /nginx/sites-enabled/ armazena links simbólicos para os arquivos de configuração de sites criados em /etc/nginx/sites-available/, para ativar os sites. E excluir um link simbólico desativa esse site específico.

Com base na fonte de instalação, você encontrará o arquivo de configuração padrão do site em /etc/nginx/conf.d/default.conf (se você instalou a partir do repositório oficial NGINX e EPEL) ou /etc/nginx/sites-enabled/default (se você instalou a partir de repositórios do Ubuntu).

Este é nosso exemplo de bloco de servidor nginx padrão localizado em /etc/nginx/conf.d/default.conf no sistema de teste.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Uma breve explicação das diretivas na configuração acima:

  • listen: especifica a porta em que o servidor escuta.
  • server_name: define o nome do servidor que pode ser nomes exatos, nomes curinga ou expressões regulares.
  • root: especifica o diretório a partir do qual o Nginx servirá páginas da web e outros documentos.
  • índice: especifica o(s) tipo(s) de arquivo(s) de índice a serem servidos.
  • localização: usado para processar solicitações de arquivos e pastas específicos.

Em um navegador da web, quando você aponta para o servidor usando o nome do host localhost ou seu endereço IP, ele processa a solicitação e envia o arquivo /var/www/html/index.html e salva imediatamente o evento em seu log de acesso (/var/log/nginx/access.log) com uma resposta 200 (OK). Em caso de erro (evento de falha), ele registra a mensagem no log de erros (/var/log/nginx/error.log).

Para saber mais sobre como fazer login no Nginx, consulte Como configurar acesso personalizado ou formatos de log de erros no Nginx.

Em vez de usar os arquivos de log padrão, você pode definir arquivos de log personalizados para diferentes sites, como veremos mais adiante, na seção “configurando hosts virtuais baseados em nomes (blocos de servidor)”.

Como restringir o acesso a uma página da Web com Nginx

Para restringir o acesso ao seu site/aplicativo ou a algumas partes dele, você pode configurar a autenticação HTTP básica. Isto pode ser usado essencialmente para restringir o acesso a todo o servidor HTTP, blocos de servidor individuais ou blocos de localização.

Comece criando um arquivo que armazenará suas credenciais de acesso (nome de usuário/senha) usando o utilitário htpasswd.

 
yum install httpd-tools		#RHEL/CentOS
sudo apt install apache2-utils	#Debian/Ubuntu

Como exemplo, vamos adicionar o usuário admin a esta lista (você pode adicionar tantos usuários quanto possível), onde a opção -c é usada para especificar o arquivo de senha, e a opção -B para criptografar a senha. Depois de clicar em [Enter], você será solicitado a inserir a senha do usuário:

sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

Em seguida, vamos atribuir as permissões e propriedade adequadas ao arquivo de senha (substitua o usuário e grupo nginx por www-data no Ubuntu).

sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Como mencionamos anteriormente, você pode restringir o acesso ao seu servidor web, a um único site (usando seu bloco de servidor) ou a um diretório ou arquivo específico. Duas diretivas úteis podem ser usadas para conseguir isso:

  • auth_basic – ativa a validação de nome de usuário e senha usando o protocolo “Autenticação Básica HTTP”.
  • auth_basic_user_file – especifica o arquivo da credencial.

Como exemplo, mostraremos como proteger com senha o diretório /var/www/html/protected.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Agora, salve as alterações e reinicie o serviço Nginx.

sudo systemctl restart nginx 

Na próxima vez que você apontar seu navegador para o diretório acima (http://localhost/protected), você será solicitado a inserir suas credenciais de login (nome de usuário admin e a senha escolhida ).

Um login bem-sucedido permite que você acesse o conteúdo do diretório, caso contrário, você receberá um erro “401 Autorização necessária”.

Como configurar hosts virtuais baseados em nome (blocos de servidor) no Nginx

O contexto do servidor permite que vários domínios/sites sejam armazenados e servidos na mesma máquina física ou servidor virtual privado (VPS). Vários blocos de servidor (representando hosts virtuais) podem ser declarados no contexto http para cada site/domínio. O Nginx decide qual servidor processa uma solicitação com base no cabeçalho da solicitação que recebe.

Demonstraremos esse conceito usando os seguintes domínios fictícios, cada um localizado no diretório especificado:

  • wearelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

Em seguida, atribua as permissões apropriadas no diretório de cada site.

sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Agora, crie um arquivo index.html de amostra dentro de cada diretório public_html.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

Em seguida, crie os arquivos de configuração do bloco do servidor para cada site dentro do diretório /etc/httpd/conf.d.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf

Adicione a seguinte declaração de bloco de servidor no arquivo wearelinux-console.net.conf.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Em seguida, adicione a seguinte declaração de bloco de servidor no arquivo welovelinux.com.conf.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Para aplicar as alterações recentes, reinicie o servidor web Nginx.

sudo systemctl restart nginx

e apontar seu servidor web para os endereços acima deverá fazer com que você veja as páginas principais dos domínios fictícios.

http://wearelinux-console.net
http://welovelinux.com

Importante: Se você tiver o SELinux ativado, sua configuração padrão não permitirá que o Nginx acesse arquivos fora de locais autorizados conhecidos (como /etc/nginx para configurações, /var/log/nginx para registros, /var/www/html para arquivos da web, etc.) .

Você pode lidar com isso desabilitando o SELinux ou definindo o contexto de segurança correto. Para obter mais informações, consulte este guia: usando Nginx e Nginx Plus com SELinux no site do Nginx Plus.

Como instalar e configurar SSL com Nginx

Os certificados SSL ajudam a ativar HTTP seguro (HTTPS) em seu site, o que é essencial para estabelecer uma conexão confiável/segura entre os usuários finais e seu servidor, criptografando as informações que é transmitido para, de ou dentro do seu site.

Abordaremos como criar e instalar um certificado autoassinado e gerar uma solicitação de assinatura de certificado (CSR) para adquirir um certificado SSL de uma autoridade de certificação (CA), para usar com Nginx.

Certificados autoassinados são gratuitos para criar e são praticamente adequados para fins de teste e para serviços internos somente de LAN. Para servidores públicos, é altamente recomendável usar um certificado emitido por uma CA (por exemplo, Let’s Encrypt) para manter sua autenticidade.

Para criar um certificado autoassinado, primeiro crie um diretório onde seus certificados serão armazenados.

sudo mkdir /etc/nginx/ssl-certs/

Em seguida, gere seu certificado autoassinado e a chave usando a ferramenta de linha de comando openssl.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

Vamos descrever brevemente as opções usadas no comando acima:

  • req -X509 – mostra que estamos criando um certificado x509.
  • -nodes (NO DES) – significa “não criptografar a chave”.
  • -dias 365 – especifica o número de dias durante os quais o certificado será válido.
  • -newkey rsa:2048 – especifica que a chave gerada usando o algoritmo RSA deve ser de 2048 bits.
  • -keyout /etc/nginx/ssl-certs/nginx.key – especifica o caminho completo da chave RSA.
  • -out /etc/nginx/ssl-certs/nginx.crt – especifica o caminho completo do certificado.

Em seguida, abra o arquivo de configuração do host virtual e adicione as seguintes linhas a uma declaração de bloco do servidor que escuta na porta 443. Testaremos com o arquivo host virtual /etc/nginx/conf.d/wearelinux-console.net.conf.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

Em seguida, adicione a diretiva SSL ao arquivo de configuração nginx, deve ser semelhante ao abaixo.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Agora reinicie o Nginx e aponte seu navegador para o seguinte endereço.

https://www.wearelinux-console.net

Se desejar adquirir um certificado SSL de uma CA, você precisará gerar uma solicitação de assinatura de certificado (CSR), conforme mostrado.

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

Você também pode criar um CSR a partir de uma chave privada existente.

sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Em seguida, você precisa enviar o CSR gerado para uma CA para solicitar a emissão de um certificado SSL assinado por uma CA. Depois de receber seu certificado da CA, você poderá configurá-lo conforme mostrado acima.

Leia também: O guia definitivo para proteger, fortalecer e melhorar o desempenho do servidor Web Nginx

Resumo

Neste artigo, explicamos como instalar e configurar o Nginx; abordou como configurar hospedagem virtual baseada em nome com SSL para proteger as transmissões de dados entre o servidor web e um cliente.

Se você tiver enfrentado algum contratempo durante o processo de instalação/configuração do nginx ou tiver alguma dúvida ou comentário, use o formulário de feedback abaixo para entrar em contato conosco.