Servidor web · 3 min read · Dec 27, 2025

Nginx Catch-All Host Como Front End Para Apache Para ISPConfig 3 En Debian Lenny

Nginx Catch-All Host Como Front End Para Apache Para ISPConfig 3 En Debian Lenny

By Nedim Hadzimahmutovic < [email protected] >
Version: v1.1
Last Change: May 19, 2010

Introducción

Apache siempre ha sido el servidor web de elección para mí. Es una verdadera bestia cuando se trata de uso de recursos, especialmente en un entorno limitado en recursos como un VPS. Comencé a jugar con Nginx, un servidor web ligero y de alto rendimiento. Mi área de interés era ejecutar Nginx como un proxy inverso y hacerlo funcionar en un entorno Apache/ISPConfig 3.

El Problema

Soy un usuario de OpenVZ, apache2-mpm-itk, mod_php. Apache mpm-itk no soporta FastCGI. Este problema aumenta dramáticamente si usas un sistema operativo de 64 bits, ya que Apache ahora usará mucha más memoria (los sistemas de 32 bits tienen punteros de 4 bytes, mientras que los sistemas de 64 bits tienen punteros de 8 bytes). Comencé a recibir errores de límite de KMEMSIZE y Apache fue la razón por la que. Apache hizo que mi VPS fuera inutilizable, así que tuve que buscar una alternativa.

La Solución

Nginx fue la respuesta, pero soy un usuario de ISPConfig que solo soporta Apache y si encontraba una forma de sortear esto, no habría manera de que gestionara manualmente cada host virtual. La solución fue configurar Nginx como un host catch-all como front-end y proxy a Apache, que se ejecutará en el back-end en un puerto diferente. De esta manera, Nginx servirá los archivos estáticos y PHP quedará a cargo de Apache. También puedes dejar un dominio completo a Nginx si lo deseas, solo coloca el host virtual de ese dominio antes del vhost por defecto. Un paso más sería ejecutar un entorno chroot de 32 bits sobre el sistema operativo de 64 bits e instalar Apache de 32 bits, pero esto no se cubrirá en este tutorial.

Configurar Apache

Configura Apache para que se ejecute en el puerto 82 en /etc/apache2/ports.conf y en todos tus hosts virtuales. Para facilitar, usa el comando sed:

 # sed -ie 's/YOUR-IP:80/YOUR-IP:82/g' /etc/apache2/sites-available/*.vhost 

Asumo que tu host virtual está basado en IP - tu vhost podría tener *:80 en lugar de IP:80.

El comando sed hará archivos de respaldo de tus archivos .vhost que tendrán la extensión .vhoste. Puedes mover los archivos de respaldo de vhost:

mkdir /root/apache2_vhost_backup/
mv /etc/apache2/sites-available/*.vhoste /root/apache2_vhost_backup/

Reinicia apache y usa netstat para verificar si está corriendo en el puerto 82:

  tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      7630/apache2 

Ahora tienes que cambiar las plantillas de Apache de ISPConfig. Cópialas a tu directorio conf-custom:

 # cd /usr/local/ispconfig/server/ 
 # cp conf/apache_ispconfig.conf.master conf-custom/ 
 # cp conf/vhost.conf.master conf-custom/ 

Abre los dos archivos y cambia :80 a :82. Solo para estar seguro, ejecuta el comando grep y verifica si la salida coincide:

 # grep :82 -i /usr/local/ispconfig/server/conf-custom/* 

/usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master:NameVirtualHost {tmpl_var name=”ip_address”}:82
/usr/local/ispconfig/server/conf-custom/vhost.conf.master: :82>

Verás todas las solicitudes como si provinieran de localhost (127.0.0.1). Para ver la dirección IP real de los usuarios, tendrás que instalar libapache2-mod-rpaf:

 # apt-get install libapache2-mod-rpaf 

Agrega lo siguiente a /etc/apache2/apache2.conf:

# nano /etc/apache2/apache2.conf
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 TU_DIRECCIÓN_IP

Instalando Y Configurando Nginx

Habilita el repositorio lenny-backports, encontrarás las instrucciones en http://backports.org/.

 apt-get install nginx 

Elimina el vhost por defecto:

 # rm /etc/nginx/sites-available/default 

Abre el archivo:

 # nano /etc/nginx/sites-available/default 

Agrega el siguiente contenido al archivo:

server {
    listen   80 default; 
        server_name  _;
        server_name_in_redirect  off;
    resolver  127.0.0.1;
#### www. redirect - todos los dominios que comienzan con www serán redirigidos a http://domain. ####
    if ($host ~* ^(www\.)(.+)) {
        set $rawdomain $2;
        rewrite ^/(.*)$  http://$rawdomain/$1 permanent;
    }
    access_log  /var/log/ispconfig/httpd/$host/access.log;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3)$ {
    root   /var/www/$host/web; 
    access_log off;
    expires 30d;
    }
location / {
    root   /var/www/$host/web;
    index  index.html index.htm index.php;
        access_log      off;
        proxy_pass http://$host:82;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Eso es todo. Nginx servirá todos tus archivos estáticos como imágenes, incluso archivos html y cosas de php serán reenviadas a Apache.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.