Configurando um proxy reverso com NGINX, CentOS e Hyper-V – // Rodolfo Fadino
rodolfo in Server | January 19, 2013 Configurando um proxy reverso com NGINX, CentOS e Hyper-V
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.
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.
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).
Para começar, vou criar um Virtual Switch no meu computador, vou configurar ele como External
Após isso, vou adicionar uma nova VM, chamada CentOS NGINX
Vou configurar a memória para 1024MB:
Vou adicionar o virtual switch que eu criei
Nosso próximo passo será a configuração do disco da VM, para este exemplo eu configurei um disco com 15GB.
Nas opções de instalação e boot, e adicionei a ISO do CentOS
Instalando o CentoOS
Após estas configurações podemos ligar a VM e começar a instalar o CentOS
Nossos primeiros passos durante a instalação são;
configurar o idioma;
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.
Após isso, é só esperar a instalação do CentOS para podermos configurar e instalar o NGIXN
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.
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:
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:
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"
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:
Para RHEL / CentOS 6.0, 6.1, 6.2:
Para RHEL / CentOS 6.3:
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"
Após reiniciar a vm será possível configurar e visualizar o adaptador de rede do hyper-v:
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 )
Nesta arquivo vamos configurar as seguintes informações:
(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"
No resolv.conf eu configurei os servidores de DNS do Google:
Após todas as configurações será necessário reiniciar o serviço de rede, utilizando o comando: "service network restart"
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:
Com estas configurações já temos acesso a internet em nossa VM com CentOS.
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:
Agora com essa configuração é possível instalar o NGINX utilizando o seguinte comando: "sudo yum install nginx"
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:
Após a instalação ser concluída, é possível iniciar o NGINX com o seguinte comando: "/etc/init.d/nginx start"
Com isso, ao acessar o ip externo da vm, já conseguimos ver a mensagem do arquivo padrão do NGIXN:
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".
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:
O outro arquivo de configuração que devemos alterar é o "/etc/nginx/conf.d/default.conf"
É 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:
proxy_pass http://rodolfofadino.com.br;
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
Feito isso, só precisaremos reiniciar o NGINX e teremos nosso proxy reverso funcionando ("/etc/init.d/nginx restart")
Agora ao acessar o ip externo de nossa VM o site que será carregado é o que configuramos no proxy_pass
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.