DevSecOps

24 ago, 2012

Como criar um Proxy transparente com Nginx

Publicidade

Muitas pessoas usam o Squid para fazer qualquer tipo de proxy – ate mesmo para proxy transparente para usar em servidor web. Por exemplo: Você tem um site que precisa ter IP aqui no Brasil, mas como o custo de servidor e link aqui no Brasil é muito caro, você pode fazer um proxy transparante para o servidor aqui no Brasil ser um cara que vai receber a requisição e repassar para o outro servidor que esteja em qualquer lugar do mundo. Com essa solução, podemos ter uma máquina simples (com pouco poder de processamento) pois ela só vai receber o tráfego e repassar para o servidor que vai estar em outro local.

Vamos imaginar um exemplo prático. Preciso que o usuário acesse o IP 177.71.248.185 (é um servidor da Amazon no Brasil). Esse servidor precisa receber a requizição e repassar para o IP 67.159.35.2 (é a maquina principal onde é processado o backend – esse servidor esta fora do Brasi). Foi usado essa solução em um portal que atendo para ter baixa latencia.

Vamos ao exemplo prático:

upstream server {
server 67.159.35.2;
}
server {
listen 80;
server_name avelino.us www.avelino.us;
location / {

proxy_cache proxy-cache;
proxy_cache_key “$host$request_uri$args”;
proxy_ignore_headers “Cache-Control” “Expires”;
proxy_cache_min_uses 1;
proxy_hide_header Set-Cookie;
proxy_cache_valid 200 301 302 30m;
proxy_cache_valid any 0m;
proxy_buffering on;

proxy_pass http://server;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

}

Criei um “upstream server” para falar qual é o servidor de destino do trafego, Na configuração acima tem um cache de 30 minutos, pois no servidor principal tem cache de quatro horas.

Logicamente que existe desvantagem com isso, pois estaremos trafegando em duas (ou mais) rede, assim usando o tráfego do servidor que está recebendo a primeira requisição e do segundo, que esta recebendo um requisição do primeiro.