in Server

Configurando um proxy reverso com NGINX, CentOS e Hyper-V

O NGINX é um web server extremamente performático, open source, foi criado por Igor Sysoev. Este web server é amplamente utilizado em várias aplicações, um dos maiores destaques do NGINX é o baixo uso dos recursos e a performance.

image

Um dos usos mais difundidos do NGINX é o Proxy Reverso (reverse proxy), que consiste em um ou mais servidores web, que ficam entre as requisições dos usuários e nossos servidores de aplicação, criando uma camada entre eles, é nessa camada que podemos implementar cache das requisições, como por exemplo, criar um cache em arquivos estáticos e imagens, o que tira essa responsabilidade dos nossos servidores de aplicação.

image

Sistema Operacional

o NGINX nativamente funciona em sistemas operacionais Linux, entretanto existe uma versão que funciona em ambientes Windows, para aplicações de produção, eu  aconselho fortemente o uso de uma distribuição do Linux chamada CentOS.

Plataforma de Virtualização

Nesse post eu utilizei o Microsoft Hyper-V, que é a base da plataforma de virtualização da Microsoft, existem diversas vantagens em se trabalhar com um ambiente virtualizado, como: melhor controle, uso do hardware com uma maior densidade, e melhor organização (separação entre ambientes).

Criando a VM

Para começar, vou criar um Virtual Switch no meu computador, vou configurar ele como External

image

 

Após isso, vou adicionar uma nova VM, chamada CentOS NGINX

image

Vou configurar a memória para 1024MB:

image

Vou adicionar o virtual switch que eu criei

image

Nosso próximo passo será a configuração do disco da VM, para este exemplo eu configurei um disco com 15GB.

image

Nas opções de instalação e boot, e adicionei a ISO do CentOS

image

Instalando o CentoOS

Após estas configurações podemos ligar a VM e começar a instalar o CentOS

image

Nossos primeiros passos durante a instalação são;

    • configurar o idioma;
    • configurar o layout do teclado;
    • selecionar o modo de storage (basic storage);
    • formatar o disco que alocamos para ela;
    • configurar o nome da maquina;
    • configurar os dados de data e hora;
    • configurar a senha de root;
    • configurar o layout dos discos;

Como opções de instalação utilizarei a configuração chamada basic server.

image

Após isso, é só esperar a instalação do CentOS para podermos configurar e instalar o NGIXN

image

image

Configurando a Rede

Com o sistema operacional instalado é possível conectar na VM e utilizar um comando chamado “ifconfig -a”, que serve para mostrar as configurações de todas as interfaces de rede, como é possível ver, a interface de rede do Hyper-V não foi reconhecida.

image

Para que a interface seja reconhecida nesta versão do SO, é preciso instalar o Linux Integration Services Version 3.4 for Hyper-V. Após realizar o download da ISO, é só adicionar o caminho da ISO na Media da VM:

image

Após inserir o caminho da ISO, é possível montar a unidade com os arquivos de instalação, precisaremos utilizar o seguinte comando: “mount /dev/cdrom /media”. Com a unidade montada é possível ver que existem várias pastas de instalação:

image

Agora será será necessário identificar a versão do SO que estamos utilizando, para que, com essa informação, nós possamos instalar a versão correta do Linux Intgration Services. Para exibir a versão  utilizaremos o seguinte comando: “cat /etc/centos-release”

image

A partir da versão podemos saber a pasta com a versão correta para a instalação:

Para RHEL / CentOS 5.7:
# cd /media/RHEL57

Para RHEL / CentOS 5.8:
# cd /media/RHEL58

Para RHEL / CentOS 6.0, 6.1, 6.2:
# cd /media/RHEL6012

Para RHEL / CentOS 6.3:
# cd /media/RHEL63

Com isso, vamos entrar na pasta especifica da versão e utilizar o “./instal.sh”. Após a instalação é necessário realizar o reboot da VM, para reiniciar é só utilizar o comando: “shutdown –r now”

image

Após reiniciar a vm será possível configurar e visualizar o adaptador de rede do hyper-v:

image

Para configurar a rede, vou editar, ou criar o arquivo que fica no “/etc/sysconfig/networking-scripts/ifcfg-eth0”. Lembrando que o nome do arquivo varia de acordo com a interface que vamos configurar ( ifcfg-eth0 )

image

Nesta arquivo vamos configurar as seguintes informações:

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.1

image

(notem que para salvar o arquivo eu utilizo o comando Esc + :wq)

Ainda nas configurações de rede, vamos configurar os servidores de DNS, estas configurações ficam no arquivo “/etc/resolv.conf”

image

No resolv.conf eu configurei os servidores de DNS do Google:

nameserver 8.8.8.8

nameserver 8.8.4.4

image

Após todas as configurações será necessário reiniciar o serviço de rede, utilizando o comando: “service network restart”

image

Nosso próximo passo será desabilitar o firewall para conseguirmos testar o ambiente, claro que em um ambiente de produção o ideal é configurar o firewall.

Para isso vamos utilizar os seguintes comandos:

service iptables save
service iptables stop
chkconfig iptables off

image

Com estas configurações já temos acesso a internet em nossa VM com CentOS.

image

Instalando o NGINX

Nas próximas etapas vamos instalar e configurar o NGXIN como um servidor de proxy reverso.

Para instalar o NGINX no CentOS será necessário adicionar o repositório do nginx, para isso criaremos um arquivo no “/etc/yum.repos.d/nginx.repo” com o seguinte conteúdo:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

image

Agora com essa configuração é possível instalar o NGINX utilizando o seguinte comando: “sudo yum install nginx”

image

Com isso, ele irá buscar as dependências e a ultima versão do NGINX, fazer download e instalar, se tudo ocorrer bem veremos uma mensagem de sucesso:

image

Após a instalação ser concluída, é possível iniciar o NGINX com o seguinte comando: “/etc/init.d/nginx start”

image

Com isso, ao acessar o ip externo da vm, já conseguimos ver a mensagem do arquivo padrão do NGIXN:

image

Configurando o NGINX como um Proxy Reverso

Agora que já temos o NGINX instalado e funcionando, precisaremos alterar alguns arquivos de configuração do NGINX, que por padrão fica no arquivo: “/etc/nginx/nginx.conf”.

image

Neste arquivo,  comentaremos a linha de log de acesso com um #, e configuraremos a pasta de cache do NGINX, para isso essa configuração de cahce incluiremos a seguinte linha dentro da seção http:

proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:30m
inactive=168h  max_size=5g;

deixando o arquivo da seguinte maneira:

image

O outro arquivo de configuração que devemos alterar é o “/etc/nginx/conf.d/default.conf”

image

É neste arquivo que colocaremos qual as configurações e servidor que o NGINX fará o proxy reverso. As configurações utilizadas serão as seguintes:

location / {
proxy_pass             http://rodolfofadino.com.br;
proxy_set_header       Host $host;
proxy_cache            STATIC;
proxy_cache_valid      200  7d;
proxy_cache_use_stale  error timeout invalid_header updating
http_500 http_502 http_503 http_504;
}

image

Com esses arquivos alterados a ultima coisa que será necessária é criar a pasta onde os arquivos do cache serão armazenados, para isso utilizaremos o seguinte comando: mkdir

image

Feito isso, só precisaremos reiniciar o NGINX e teremos nosso proxy reverso funcionando (“/etc/init.d/nginx restart”)

image

Agora ao acessar o ip externo de nossa VM o site que será carregado é o que configuramos no proxy_pass

image

A estratégia de utilizar um servidor de proxy reverso é muito importante em vários cenários, como por exemplo na entrega de arquivos estáticos: imagens, css, js.

Espero que o este post seja útil,

estou a disposição para duvidas, criticas e sugestões

abs

Rodolfo

  • Rodrigo Pires

    Caramba Rodolfino, tá se superando hein?! 🙂 ANIMAL o post, bem completo. Parabéns!