Note que estamos usando a porta 8080 ao invés da porta 80, que é a porta padrão do HTTP (Hypertext Transfer Protocol - Protocolo de Transferência de Hipertexto), pois vamos logo a seguir instalar o serviço do Proxy Reverso na porta 80 e caso não façamos essa alteração, o serviço do
NGINX não será instalado.
Após essa etapa, podemos ver que o servidor WEB Apache está funcionando e concluímos suas configurações. Agora devemos instalar o servidor de Proxy Reverso e configurar o acesso criptografado.
O próximo passo é instalar o serviço do NGINX com o comando:
# sudo -H apt install -y nginx
Em seguida, vamos confirmar se ele está funcionando corretamente com uma sequência de comandos. Esses são comandos muito importantes e bastante úteis. Sempre que editar alguma configuração, antes de executar o comando para reiniciar ou recarregar o serviço, verifique se não há erros de configurações usando um ou os três comandos abaixo:
# nginx -t
# service nginx configtest
# systemctl status nginx
Segue abaixo, respectivamente, as telas de retorno que cada um desses comandos deve trazer.
Agora, reinicie o serviço do NGINX:
# systemctl restart nginx
Por padrão, o NGINX tem um limite de 1024 arquivos que podem ser abertos simultaneamente, para evitar que sejam apresentadas mensagens de falhas, devido esse limite ser atingido, recomendamos alterar as configurações do arquivo
/etc/nginx/nginx.conf, usando o comando abaixo.
# vim /etc/nginx/nginx.conf
Para corrigi-lo, você pode usar as diretivas worker_rlimit_nofile e worker_connections, na parte superior do seu
/etc/nginx/nginx.conf. As dez primeiras linhas do nosso arquivo "nginx.conf" ficaram conforme abaixo:
user www-data;
worker_processes auto;
worker_rlimit_nofile 8192;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 4096;
# multi_accept on;
}
Uma vez instalado e ativo o serviço do NGINX, vamos criar um arquivo de Host Virtual chamado "proxy":
# vim /etc/nginx/sites-available/proxy
Esse arquivo deve conter o seguinte conteúdo:
server {
listen 80;
server_name www.exemplo1.com www.exemplo2.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Agora precisamos remover o arquivo default da pasta "sites-enabled":
# rm /etc/nginx/sites-enabled/default
Em seguida, vamos criar um link simbólico para o Proxy virtual host ficar habilitado e assumir a função de arquivo default no NGINX:
# ln -s /etc/nginx/sites-available/proxy /etc/nginx/sites-enabled/proxy
Devemos realizar a criação do arquivo chamado "exemplo1" com os conteúdos mostrados abaixo na pasta
/etc/nginx/sites-available:
# vim /etc/nginx/sites-available/exemplo1
Esse arquivo deve conter o seguinte conteúdo:
server {
listen 80;
server_name exemplo1.com www.exemplo1.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Em seguida, devemos realizar a criação do arquivo chamado "exemplo2" com os conteúdos mostrados abaixo na pasta
/etc/nginx/sites-available:
# vim /etc/nginx/sites-available/exemplo2
Esse arquivo deve conter o seguinte conteúdo:
server {
listen 80;
server_name exemplo2.com www.exemplo2.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Vamos criar um link simbólico dos arquivos "exemplo1" e "exemplo2" no caminho
/etc/nginx/sites-enabled:
# ln -s /etc/nginx/sites-available/exemplo1 /etc/nginx/sites-enabled/exemplo1
# ln -s /etc/nginx/sites-available/exemplo2 /etc/nginx/sites-enabled/exemplo2
Estando tudo configurado com sucesso, conforme demonstrado acima, agora já é possível acessar os sites do Apache pela porta HTTP padrão, como podemos ver abaixo, isso significa que o Proxy Reverso já está encaminhando as requisições de maneira adequada ao host virtuais no servidor WEB Apache.
Para finalizar as configurações, vamos tornar o acesso do navegador ao Proxy Reverso NGINX um acesso criptografado via protocolo HTTPS (Hyper Text Transfer Protocol Secure - Protocolo de Transferência de Hipertexto Seguro), como o tutorial é para fins didáticos, mostraremos como configurar usando um certificado auto assinado.
Vá para o diretório onde os arquivos serão criados os certificados:
# cd /etc/nginx
Vamos criar um certificado com o OpenSSL (OpenSSL é uma implementação de código aberto dos protocolos SSL e TLS) no seguinte comando:
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt
A seguinte entrada irá gerar a seguinte saída, os itens marcados na cor laranja podem ser configurados da forma que desejar para seu certificado.
Agora, executando esses dois comandos abaixo, podemos visualizar os dois arquivos:
# cd /etc/nginx
# ls
Para finalizar, devemos alterar a configuração do arquivo do Proxy criado anteriormente. Primeiro acesse o arquivo e depois edite-o da seguinte maneira:
# vim /etc/nginx/sites-available/proxy
Esse arquivo deve conter o seguinte conteúdo:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name _;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RCA;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://$host$request_uri;
}
}
Essa parte final demonstra que a criptografia com certificado auto assinado está totalmente funcional no Proxy Reverso, o Proxy NGINX recebe as requisições dos clientes e envia ao Apache o qual retorna ao NGINX a página solicitada, posteriormente o Proxy criptografa as informações e envia ao cliente, a partir daí a comunicação é toda criptografada entre cliente (Navegador) e servidor (Proxy NGINX).
Conforme comentado acima, haviam três comandos importantes. Agora vamos utilizá-los novamente:
# nginx -t
# service nginx configtest
# systemctl status nginx
Segue abaixo, respectivamente, as telas de retorno que cada um desses comandos deve trazer:
Reinicie o serviço do NGINX:
# systemctl restart nginx
Observação: nas imagens abaixo, existem itens escritos na cor vermelha. Esses itens são apresentados dessa forma devido ao navegador não poder verificar que a chave pública fornecida é uma chave válida por nenhuma Autoridade Certificadora da Internet, ou seja, estamos interessados apenas no aspecto de criptografia do nosso certificado, não na validação de terceiros da autenticidade do nosso host.
Assim, como foi dito, para sistemas em produção é recomendado usar um certificado confiável gratuito, como por exemplo, do projeto Let's Encrypt. Saiba mais, como configurar o Let's Encrypt
aqui.
NOTA: a criptografia de chaves públicas e privadas, utiliza duas chaves distintas, uma para codificar e outra para decodificar mensagens. Neste método, cada pessoa ou entidade mantém duas chaves: uma pública, que pode ser divulgada livremente, e outra privada, que deve ser mantida em segredo pelo seu dono. As mensagens codificadas com a chave pública só podem ser decodificadas com a chave privada correspondente.