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.confRPAFsethostname On
RPAFproxy_ips 127.0.0.1 TU_DIRECCIÓN_IPInstalando 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.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.