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:
- Caso precise configurando o uso de HTTPS com certificado válido (e gratuito), sugerimos que leia nosso post Configurando o proxy reverso NginX para usar HTTPS com certificado válido e gratuito
- Caso precise adicionar a credencial de acesso no NginX, sugerimos que leia nosso post sobre como Restringir IPs que acessam um site pelo proxy reverso NginX
- Caso precise configurar um redirecionamento de um virtual directory, sugerimos que leia nosso post sobre como Configurar um redirecionamento de um virtual directory no Proxy Reverso NginX
- Caso precise configurar o proxy para balancear conexões entre servidores, sugerimos que leia nosso post sobre como Configurar o proxy reverso NginX para balancear conexões entre servidores
- Caso precise configurar credenciais de acesso, sugerimos que leia nosso post sobre como Configurar credenciais de acesso para um site com um Proxy Reverso em NginX.
- Caso precise criar um site para consulta dos arquivos de configuração, sugerimos que leia nosso post de como Criar um site para consulta dos arquivos de configuração do seu proxy reverso NginX
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.