O uso do proxy reverso permite várias funcionalidades importantes, tais como: balancear a carga entre servidores, segmentar/isolar o acesso que vem da internet em uma rede isolada dos servidores (criando uma camada de segurança), utilizar recursos de aceleração como cache e compactação, entre outros.

Muitas empresas utilizam um proxy reverso para publicar vários sites através de um único servidor proxy. Muitas são as possibilidades, mas aqui iremos falar sobre a implementação usando o Nginx no CentOS 7.

Caso queira ver como implementar um proxy reverso no Windows, com o IIS, leia nosso post sobre Instalando o Proxy Reverso Microsoft IIS Application Request Routing – ARR

Pré-requisitos

Não iremos aprofundar em como executar essa parte, mas você precisa apontar o registro DNS do seu site para o servidor Nginx.

Preparando o Servidor

Primeiro, instale o CentOS 7 conforme nosso post de Instalação padrão do CentOS 7.

Instalando o Nginx

Para instalar o Nginx no Centos 7, execute os seguintes comandos:

yum install epel-release -y
yum install nginx
systemctl enable nginx
systemctl start nginx

sed -i "s/After=network.target /After=network-online.target /g" /usr/lib/systemd/system/nginx.service

sed -i "s/PIDFile=\/run\/nginx.pid/PIDFile=\/run\/nginx.pid\nExecStartPre=\/bin\/sleep 5/g" /usr/lib/systemd/system/nginx.service

Configurando o Nginx como proxy Reverso

Agora iremos configurar para o Nginx ler arquivos distintos de configuração, para isso execute:

sed -i "s/http {/http {\n server_names_hash_bucket_size 128;/g" /etc/nginx/nginx.conf
echo "include /etc/nginx/conf.d/*;" >> /etc/nginx/nginx.conf
mkdir -p /etc/nginx/conf.d/

Em seguida, vamos adicionar um arquivo de configuração para fazer o proxy do site www.suaempresa.com.br para o servidor IP_DO_SERVIDOR na porta PORTA_TCP

vi /etc/nginx/conf.d/www.suaempresa.com.br.conf

Pressione a tecla INSERT do teclado para entrar em modo de edição e adicione o seguinte conteúdo:

#Se quiser usar/definir um cache
#proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=proxy_cache:10m max_size=3g inactive=120m use_temp_path=off;

upstream pool_suaempresa.com.br {
    server 10.10.1.11 fail_timeout=30s max_fails=3 max_conns=500;
    keepalive 32;
}

server {
    listen 80;
    server_name www.suaempresa.com.br suaempresa.com.br;
    access_log /var/log/nginx/suaempresa.com.br.log main;
    error_log /var/log/nginx/suaempresa.com.br.log;
    location / {
        proxy_redirect off;
        proxy_pass http://pool_suaempresa.com.br;
        #Outras opcoes
        #proxy_pass http://IP_DO_SERVIDOR$request_uri;
        #proxy_pass http://IP_DO_SERVIDOR:PORTA_TCP;
        proxy_read_timeout 5m;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Client-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        client_max_body_size 90m;
        server_name_in_redirect on;
#        proxy_cache proxy_cache;
#        proxy_cache_revalidate on;
#        proxy_cache_min_uses 2;
#        proxy_cache_use_stale timeout;
#        proxy_cache_lock on;
    }
}

Aperte a tecla ESC do teclado, para sair do modo de edição, salve o arquivo e saia (comando :wq!). Agora reinicie o Nginx:

systemctl restart nginx

Verifique se está funcionando.

Caso o servidor que hospeda o site só aceite acesso por nome. coloque o nome do site na parte proxy_pass e, caso o DNS aponte o mesmo nome para o proxy reverso, crie o ponteiro do IP do servidor real no arquivo /etc/hosts do servidor Nginx, com o comando:

echo IP_DO_SERVIDOR www.suaempresa.com.br >> /etc/hosts

Testando a configuração do Nginx

Para testar a configuração execute o comando:

/etc/init.d/nginx configtest

Para reiniciar o servidor, execute o comando:

/etc/init.d/nginx reload

Configurações adicionais

Disponibilizamos alguns posts para possíveis configurações adicionais, entre eles:

Fontes/Referências

NVLAN – Configurando o proxy reverso NginX para usar HTTPS com certificado válido e gratuito
NVLAN – Configurar credenciais de acesso para um site com um Proxy Reverso em NginX
NVLAN – Configurar o proxy reverso NginX para balancear conexões entre servidores
NVLAN – Configurar um redirecionamento de um virtual directory no Proxy Reverso NginX
NVLAN – Criar um site para consulta dos arquivos de configuração do seu proxy reverso NginX
NVLAN – Restringir IPs que acessam um site pelo proxy reverso NginX
NVLAN – Instalação padrão do CentOS7
NVLAN – Instalando o Proxy Reverso Microsoft IIS Application Request Routing – ARR
NVLAN – Site gratuito para criar certificado SSL válido para seu servidor http

https://blog.4linux.com.br/instalando-o-nginx-e-configurando-um-proxy-reverso/
https://eigenmagic.com/2021/09/20/nginx-as-a-reverse-stream-proxy/
https://letsencrypt.org/pt-br/
http://shairosenfeld.blogspot.com/2011/03/authorization-header-in-nginx-for.html
https://phoenixnap.com/kb/how-to-install-nginx-on-centos-7

Mais Informações

Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.

Entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria