Configuración de Servidores · 7 min read · Oct 08, 2025
El Clúster Web Perfecto Balanceado y de Alta Disponibilidad Con 2 Servidores Ejecutando Xen En Ubuntu 8.04 Hardy Heron - Página 2
7. Apache/PHP5/Ruby (web1, web2)
7.1 Instalación de software
Ahora instalamos Apache:
apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
A continuación, instalamos PHP5 y Ruby (ambos como módulos de Apache):
apt-get install libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
7.2 Configuración de Apache
A continuación, editamos /etc/apache2/mods-available/dir.conf:
vi /etc/apache2/mods-available/dir.conf
y cambiamos la línea DirectoryIndex:
#DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml
Ahora tenemos que habilitar algunos módulos de Apache (SSL, rewrite, suexec e include):
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
Recargamos la configuración de Apache:
/etc/init.d/apache2 force-reload
Agregaremos algunos dominios en el archivo de configuración de vhost:
mkdir /var/www/example
mkdir /var/www/yoursite
mkdir /var/www/example/web
mkdir /var/www/example/ssl
mkdir /var/www/yoursite/web
mkdir /var/www/yoursite/ssl
echo “Include /etc/apache2/vhosts.conf” >> /etc/apache2/apache2.conf
vi /etc/apache2/vhosts.conf
El archivo de configuración debería verse así:
#NameVirtualHost 192.168.1.106:80
#
# ServerName localhost
# ServerAdmin root@localhost
# DocumentRoot /var/www/sharedip
#
#NameVirtualHost 192.168.1.107:80
#
# ServerName localhost
# ServerAdmin root@localhost
# DocumentRoot /var/www/sharedip
#
###EXAMPLE.COM###
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
Redirect /webmail http://www.example.com:81/squirrelmail
Redirect /squirrelmail http://www.example.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
### Descomentar esta parte si vas a usar SSL en este host virtual.
### No olvides crear o copiar los archivos de certificado antes de reiniciar apache.
#
#
# ServerName example.com
# ServerAlias www.example.com
# DocumentRoot /var/www/example/web
# SetEnvIf Request_URI \.jpg dontlog
# SetEnvIf Request_URI \.gif dontlog
# SetEnvIf Request_URI \.css dontlog
# SetEnvIf Request_URI \.png dontlog
# SetEnvIf Request_URI \.txt dontlog
# CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
# ErrorLog /var/log/apache2/example.com-error.log
# SSLEngine on
# SSLCertificateFile /var/www/example/ssl/www.example.com.crt
# SSLCertificateKeyFile /var/www/example/ssl/www.example.com.key
# SSLCertificateChainFile /var/www/example/ssl/www.example.com.key.org
# Redirect /webmail http://www.example.com:81/squirrelmail
# Redirect /squirrelmail http://www.example.com:81/squirrelmail
# ErrorDocument 400 /error/invalidSyntax.html
# ErrorDocument 401 /error/authorizationRequired.html
# ErrorDocument 403 /error/forbidden.html
# ErrorDocument 404 /error/fileNotFound.html
# ErrorDocument 405 /error/methodNotAllowed.html
# ErrorDocument 500 /error/internalServerError.html
# ErrorDocument 503 /error/overloaded.html
#
#
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
Redirect /webmail http://www.example.com:81/squirrelmail
Redirect /squirrelmail http://www.example.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/example.com-error.log
Redirect /webmail http://www.example.com:81/squirrelmail
Redirect /squirrelmail http://www.example.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
###YOURSITE.COM###
ServerName yoursite.com
ServerAlias www.yoursite.com
DocumentRoot /var/www/yoursite/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/yoursite.com-error.log
Redirect /webmail http://www.yoursite.com:81/squirrelmail
Redirect /squirrelmail http://www.yoursite.com:81/squirrelmail
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
ServerName yoursite.com
ServerAlias www.yoursite.com
DocumentRoot /var/www/yoursite/web
SetEnvIf Request_URI \.jpg dontlog
SetEnvIf Request_URI \.gif dontlog
SetEnvIf Request_URI \.css dontlog
SetEnvIf Request_URI \.png dontlog
SetEnvIf Request_URI \.txt dontlog
CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
ErrorLog /var/log/apache2/yoursite.com-error.log
ErrorDocument 400 /error/invalidSyntax.html
ErrorDocument 401 /error/authorizationRequired.html
ErrorDocument 403 /error/forbidden.html
ErrorDocument 404 /error/fileNotFound.html
ErrorDocument 405 /error/methodNotAllowed.html
ErrorDocument 500 /error/internalServerError.html
ErrorDocument 503 /error/overloaded.html
### Descomentar esta parte si vas a usar SSL en este host virtual.
### No olvides crear o copiar los archivos de certificado antes de reiniciar apache.
#
#
# ServerName yoursite.com
# ServerAlias www.yoursite.com
# DocumentRoot /var/www/yoursite/web
# SetEnvIf Request_URI \.jpg dontlog
# SetEnvIf Request_URI \.gif dontlog
# SetEnvIf Request_URI \.css dontlog
# SetEnvIf Request_URI \.png dontlog
# SetEnvIf Request_URI \.txt dontlog
# CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
# ErrorLog /var/log/apache2/yoursite.com-error.log
# SSLEngine on
# SSLCertificateFile /var/www/yoursite/ssl/www.yoursite.com.crt
# SSLCertificateKeyFile /var/www/yoursite/ssl/www.yoursite.com.key
# SSLCertificateChainFile /var/www/yoursite/ssl/www.yoursite.com.key.org
# Redirect /webmail http://www.yoursite.com:81/squirrelmail
# Redirect /squirrelmail http://www.yoursite.com:81/squirrelmail
# ErrorDocument 400 /error/invalidSyntax.html
# ErrorDocument 401 /error/authorizationRequired.html
# ErrorDocument 403 /error/forbidden.html
# ErrorDocument 404 /error/fileNotFound.html
# ErrorDocument 405 /error/methodNotAllowed.html
# ErrorDocument 500 /error/internalServerError.html
# ErrorDocument 503 /error/overloaded.html
#
# Las opciones “SetEnvIf Request_URI … “ y “env=!dontlog” están ahí para hacer que los registros sean más limpios, no registrarán el acceso a imágenes y archivos css.
Uso archivos de ISPConfig shareip y páginas de error: AQUÍ
Modifícalos según tus necesidades.
Primero instala wget:
apt-get install wget
cd /var/www
wget http://www.blogama.org/errorpages.tar.gz
tar -zxvf errorpages.tar.gz
rm -rf errorpages.tar.gz
chmod 755 /var/www/error/ -R
cp -av /var/www/error/ /var/www/example/web/
cp -av /var/www/error/ /var/www/yoursite/web/
Ahora editaremos el archivo /etc/apache2/sites-available/default para que no registre las solicitudes de ldirectord (el balanceador de carga):
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default.bak
vi /etc/apache2/sites-available/default
Y pega esto:
NameVirtualHost *
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/error.log
# Los valores posibles incluyen: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
#CustomLog /var/log/apache2/access.log combined
SetEnvIf Request_URI "^/ldirectord\.php$" dontlog
SetEnvIf Request_URI "token" dontlog
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
SetEnvIf Request_URI \.ico dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog
ServerSignature On
Alias /doc/ "/usr/share/doc/"
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Ahora abriremos algunos puertos en apache que se usarán más adelante:
vi /etc/apache2/ports.conf
Listen 80
Listen 81
Listen 10001
Listen 20001
Listen 443
El puerto 10001 y 20001 se usarán para monitoreo. El puerto 81 será para webmail.
Debemos reiniciar apache para aplicar las modificaciones que hicimos:
/etc/init.d/apache2 restart
7.3 Preparando los nodos de apache para balanceo de carga
Finalmente, debemos configurar nuestros nodos de clúster Apache web1.example.com y web2.example.com para aceptar solicitudes en las direcciones IP virtuales 192.168.1.106 y 192.168.1.107.
apt-get install iproute
Agrega lo siguiente a /etc/sysctl.conf:
vi /etc/sysctl.conf
# Habilitar la configuración de la opción arp_ignore
net.ipv4.conf.all.arp_ignore = 1
# Cuando se recibe una solicitud arp en eth0, solo responde si esa dirección está
# configurada en eth0. En particular, no responda si la dirección está
# configurada en lo
net.ipv4.conf.eth0.arp_ignore = 1
# Lo mismo para eth1, agregar para todas las interfaces ARPing
#net.ipv4.conf.eth1.arp_ignore = 1
# Habilitar la configuración de la opción arp_announce
net.ipv4.conf.all.arp_announce = 2
# Al hacer una solicitud ARP enviada a través de eth0, siempre usa una dirección que
# está configurada en eth0 como la dirección de origen de la solicitud ARP. Si esto
# no está configurado, y se están enviando paquetes a través de eth0 para una dirección que está en
# lo, y se requiere una solicitud arp, entonces se usará la dirección en lo.
# Como la dirección IP de origen de las solicitudes arp se ingresa en la caché ARP en
# el destino, tiene el efecto de anunciar esta dirección. Esto
# no es deseable en este caso, ya que las direcciones en lo en los servidores reales deben
# ser anunciadas solo por el director-linux.
net.ipv4.conf.eth0.arp_announce = 2
# Lo mismo para eth1, agregar para todas las interfaces ARPing
#net.ipv4.conf.eth1.arp_announce = 2Luego ejecuta esto:
sysctl -p
Agrega esta sección para la dirección IP virtual a /etc/network/interfaces:
vi /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.168.1.106
netmask 255.255.255.255
pre-up sysctl -p > /dev/null
auto lo:1
iface lo:1 inet static
address 192.168.1.107
netmask 255.255.255.255
pre-up sysctl -p > /dev/nullLuego ejecuta esto:
Por favor nota: después del siguiente paso probablemente obtendrás este error: SIOCSIFFLAGS: No se puede asignar la dirección solicitada
Ese es un error normal y puedes ignorarlo.
ifup lo:0
ifup lo:1
Si cambias la IP en una etapa posterior, se recomienda hacer ifup lo:0 luego ifdown lo:0 y luego nuevamente ifup lo:0
Finalmente, debemos crear el archivo ldirectord.php. Este archivo es solicitado por los dos nodos del balanceador de carga repetidamente para que puedan ver si los dos nodos de Apache siguen funcionando junto con MySQL. Supongo que la raíz del documento del sitio web principal de apache en web1 y web2 es /var/www, por lo tanto, creamos el archivo /var/www/ldirectord.php:
vi /var/www/ldirectord.php
y copia esto:
Más tarde configuraremos MySQL con acceso local al usuario “ldirectord”, en este momento el archivo no funcionará.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.