Proxy inverso con nginx y apache

 

todos sabemos  y no es un secreto que un servidor proxy inverso es un intermediario entre el trafico entrante de internet y nuestros servidores web, con esto me refiero que cada solicitud que se realice a nuestros servidores web debe pasar primero por nuestro servidor proxy, el cual  realiza una petición a uno de los servidores en forma aleatoria, si estamos publicando el mismo contenido en mas de un servido (balanceo de carga) , o si simplemente contamos con un servidor como en mi caso que trabajar con dominios virtuales en apache. en cualquiera de las dos situaciones  el que presenta los datos solicitados al usuario es el servidor proxy.

uno de los grande beneficios de contar con un servidor proxy inverso es el de las seguridad, dado que el usuario que realiza una solicitud web no interactúa directamente con los servidores web.

 

como instalar nginx

apt-get install nginx

una vez intalado

vamos al archivo de configuracion

nano /etc/nginx/nginx.conf

y modificamos el archivo por este.

 

# smart default nginx (Ubuntu 9.04)

user                www-data www-data;
worker_processes    1;

error_log           /var/log/nginx/error.log warn;
pid                 /var/run/nginx.pid;

events {
    worker_connections  1024;
    use epoll;
}

http {
    # allow long server names
    server_names_hash_bucket_size 64;
    
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log          /var/log/nginx/access.log;
    
    # spool uploads to disk instead of clobbering downstream servers
    client_body_temp_path /var/spool/nginx-client-body 1 2;
    client_max_body_size 32m;
    client_body_buffer_size    128k;
    
    server_tokens       off;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         off;

    keepalive_timeout   5;
    
    ## Compression
    gzip on;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_min_length  1100;
    gzip_buffers 16 8k;
    gzip_types text/plain text/html text/css application/x-javascript \
        text/xml application/xml application/xml+rss text/javascript \
        image/gif image/jpeg image/png;
    # Some version of IE 6 don't handle compression well on some mime-types, 
    # so just disable for them
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    # Set a vary header so downstream proxies don't send cached gzipped 
    # content to IE6
    gzip_vary on;
    
    # proxy settings
    proxy_redirect     off;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_max_temp_file_size 0;

    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;

    proxy_buffer_size          4k;
    proxy_buffers              4 32k;
    proxy_busy_buffers_size    64k;
    proxy_temp_file_write_size 64k;

    include             /etc/nginx/sites-enabled/*;
    include 		/etc/nginx/conf.d/*.conf;


}

ahora configuramos  nginx para entrelazarlo con  el sitio de apache  que queremos publicar, en caso de tener varios tenemos que crear varios sites como los que se muestran a continuacion.

nota: site es el nombre que le he querido poner a mi sitio.

primero vamos a siguiente ruta

cd  /etc/nginx/sites-available/

ahora creamos y editamos

nano site

y ponemos esto dentro

 

server{
listen 192.168.1.106:80;
server_name www.anime.com anime.com;
location / {
proxy_pass http://192.168.1.106:8080;
include /etc/nginx/proxy.conf;
}
location / {
root /var/www/nginx-default/;
}
} 

 

lo explico

 

1.listen: es la direccion publica en mi caso privada por donde va ha escuchar nginx + el puerto. 

2. server name: especificamos el FQDN y el dominio.

3.proxy_pass: la direccion y el puerto por donde va eschusar el servidor apache.

4. root: es la ruta donde se encuentra nuestro sitio alamacenado.

 

explico un poco lo de los puertos, nginx como va hacer el que recibe la peticion va eschucar directament por el puerto 80, en consecuencia debemos modificar el puetor por donde escucha nuestro servidor apache para no crear conflicto y lograr que ambos queden funcionales.  

 

una vez terminada la configuracion anterior ejecutamos la siguiente linea

 

 ln  -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/site

ahora para poder procesar la peticiones que se realicen a nuestro sitio via apache creamos el siguiente archivo en la siguiente ruta.

nano /etc/nginx/proxy.conf

he ingresamos las siguiente lineas.

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size 10m;

client_body_buffer_size 128k;

proxy_connect_timeout 90;

proxy_send_timeout 90;

proxy_read_timeout 90;

proxy_buffer_size 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

 

ahora reiniciamos nginx

/etc/init.d/nginx restart

 

instalación y configuracion de apache

 

para isntalar basta con el siguiente comando.

apt-get install apache2

 

ahora modificamos el puero por donde escucha para no crear conflicto como lo mencionamos anteriormente.

vamos a la siguiente ruta.

cd /etc/apache2

y editamos el siguiente archivo.

nano ports.conf

para que quede de la siguiente manera.

 

NameVirtualHost *:8080

Listen 8080

Aora creamos un archivo de configuración para site en /etc/apache2/sites-available/site

he incluimos la siguientes lineas.

 

NameVirtualHost 192.168.1.106
 <VirtualHost 192.168.1.106>
         ServerName www.anime.com
         ServerPath /nginx-defaul
        DocumentRoot /var/www/nginx-default
        Directoryindex  nada.html  index.html index.php index.shtml
  <Directory /var/www/nginx-default>
     AllowOverride All
     Options MultiViews Indexes SymLinksIfOwnerMatch
     Allow from All
   </Directory>
 
   </VirtualHost>

 

no olvidar publicar nuestro sitio en la carpeta web, en la ruta que especificamos en el DocumentRoot  la mía es /var/www/nginx-default

reiniciamos apache

/etc/init.d/apache2 restart

ahora verificamos si todo ha salido bien.

ingresamos a un navegador y digitamos el nombre del dominio en mi caso es www.anime.com nos debería salir algo como esto.

 

Oksoft.es 0020

 

en esta configuracion todavía no esta redirigiendo pero lo ideal seria que lo hiciera, acepto cualquier sugerencia, por el momento especificamos el sitio en mi caso es nada.html

y se nos debe mostrar algo como esto, que es a modo de ejemplo.

 

Oksoft.es 0021

 

nota:  si tenemos paginas en lenguajes como .asp o .php el proxy debe soportar estos lenguajes para poder publicarlos , para el caso de .php podemos instalar mod_wsgi.

con el siguiente comando.

apt-get install libapache2-mod-wsgi

 

si desena verificar si se esta realizando primero la conexión con el proxy y después con el apache revise los log de nginx y apache hay se muestra todo muy bien.

3 responses to this post.

  1. oye discupla es necesario instalar en dns y configuracion dns

    Responder

    • Posted by only19 on febrero 14, 2013 at 12:51 pm

      Hola

      Evanny, no se si realmente necesitas instalar el proxy reverso con nginx, yo te recomendaria el proxy inverso con apache que es realmete facil de configurar y funciona muy bien, actualmente lo uso donde trabajo y tenemos varios servidores web. el de nginx la verdad no se como se comporte, ya que lo monte solo por probar. tu me diras.

      Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: