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 = 2

Luego 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/null

Luego 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á.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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