Nginx – Nginx como Proxy para Apache

Advertencia: post muy muy viejo

el autor 😛

Después de ver en diferentes pruebas(estático+dinámico), hablando con diferentes personas, atando cabos allí y allá, parece que Apache agota sus últimos años como servidor Web en Internet y se me hace harto difícil, dilucidar porque Parallels no ha implementado ya Nginx server en su Panel de Control Plesk.

Es imposible que exista un sólo motivo técnico de peso para mantener esa decisión. Objeciones, las que sean, mótivos reales, no puedo creer que alguien los defienda. Actualmente, sigue siendo el servidor web con mayor presencia en Internet de lejos, seguido no muy cerca por Microsoft, pero esto no cambia que Nginx ocupe ya el casi 7% del total. Es por eso que, cada vez más empezaremos a ver post de este tipo en casi todas las webs, blogs, dedicados al tema.

En este post, veremos como configurar Nginx como proxy, teniendo Apache escuchando en otro puerto que no es el 80. Esto de paso, nos servirá para estar más protegidos ante ataques contra Apache. Este tutorial es válido para configuraciones de Apache con VirtualHost, que necesitan la cabecera Header Host para funcionar.

Configurar repositorio EPEL – 64BITS

wget epel-release-5-4.noarch.rpm

Instalar Nginx

yum install nginx 

Ahora tenemos que añadir una serie de nuevos parámetros a la configuración de Nginx.

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

Esto añade tres nuevos headers a la petición que Nginx traslada a Apache. La definición de estas serían:

  • Host: necesaria para identificar a que virtualhost queremos acceder
  • X-Real-IP: la Ip que utiliza el cliente para conectarse a nginx
  • X-Forwarded-For: IP del cliente y los proxys a través de los cuales, llega la petición

Ejemplo de configuración básica de Nginx como proxy de apache(backend)

user  nginx; worker_processes  4; 
daemon off; 
events { 
    worker_connections  1024; 
} 
http { 
default_type  application/octet-stream; 
sendfile        on; 
keepalive_timeout  3; 
gzip  on; 
server { 
    listen       80; 
    server_name    _; 
    access_log      off;  
    location / { 
        proxy_pass         http://127.0.0.1:8080; } 
        proxy_set_header        Host            $host; 
        proxy_set_header        X-Real-IP       $remote_addr; 
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; 
      }
   }
}

A partir de este momento, podemos optar por seguir el siguiente capítulo de la configuración o no, pues no es relativa al funcionamiento del mismo servidor.

Si tenemos la necesidad imperiosa de generar estadísticas de tráfico, a través de los logs del propio Apache, necesitaremos instalar un módulo adicional. Se trata de mod_rpaf.

Con este módulo indicamos a Apache que utilice los headers X-Forwarded-For y el X-Real-IP como IP en su fichero de log.

Instalar y Configurar Mod_RPAF

cd /root/
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar zxvf mod_rpaf-0.6.tar.gz # cd mod_rpaf-0.6 

Deberemos modificar el Makefile para que encuentre el apxs, ya que por defecto lo busca con el nombre “apxs2“:

sed -i 's/APXS2=\$(shell which \(apxs2\))/APXS2=\$(shell which apxs)/' Makefile

También deberemos, si no esta ya, exportar el bin del apache al PATH y luego configurar

export PATH=$PATH:/usr/local/bin/
make rpaf-2.0 && make install-2.0 
echo "LoadModule rpaf_module modules/mod_rpaf-2.0.so" >> /etc/httpd/conf.d/mod_rpaf.conf 
# echo "RPAFenable On" >>  /etc/httpd/conf.d/mod_rpaf.conf 
echo "RPAFsethostname On" >>  /etc/httpd/conf.d/mod_rpaf.conf # 
echo "RPAFproxy_ips 127.0.0.1" >>  /etc/httpd/conf.d/mod_rpaf.conf 
echo "RPAFheader X-Forwarded-For" >> /etc/httpd/conf.d/mod_rpaf.conf 

Como se ve en el ejemplo, se utiliza la directiva X-Forwarded-For para averiguar la IP de origen del cliente.

Ahora quedaría, configurar Apache y sus VirtualHost para que escuchen por el puerto 8080: NameVirtualHost VirtualHost Listen Posteriormente, faltaría reiniciar Apache y Nginx.

Links

Leave a Reply

Your email address will not be published. Required fields are marked *