Host virtual en Apache 2
Christian 'Tiran' Heimes
Un ejemplo muy sencillo
Archivo de configuración:
<VirtualHost *:80>
ServerAlias www.example.org
ServerAdmin webmaster@example.org
ServerSignature On
CustomLog /var/log/apache2/example.org-access.log combined
ErrorLog /var/log/apache2/example.org-error.log
LogLevel warn
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(.*) \
http://localhost:10080/VirtualHostBase/http/%{SERVER_NAME}:80/example_org/VirtualHostRoot/$1 [L,P]
</IfModule>
</VirtualHost>
Un host virtual sirviendo zope
www.example.org.conf:
<VirtualHost *:80>
ServerAlias www.example.org
ServerAdmin webmaster@example.org
ServerSignature On
# no necesitamos un DocumentRoot para un sitio que es solo zope
#DocumentRoot /var/www/example.org
CustomLog /var/log/apache2/example.org-access.log combined
ErrorLog /var/log/apache2/example.org-error.log
LogLevel warn
# log the deflate compression rate to a file
#CustomLog /var/log/apache2/deflate_log deflate
<IfModule mod_rewrite.c>
RewriteEngine On
# usa RewriteLog para depurar problemas con tus reglas de reescritura
# deshabilitar luego de encontrar el error, o el disco duro se llenara *muy rapido*
# RewriteLog "/var/log/apache2/rewrite_log"
# RewriteLogLevel 2
# los iconos se sirven del servidor apache 2
RewriteRule ^/icons/ - [L]
# reescribamos cualquier acceso de administracion hacia nuestro sitio seguro
RewriteRule ^/(.*)/manage(.*) \
https://secure.example.org/zope/example_instance/example_org/$1/manage$2 [NC,R=301,L]
RewriteRule ^/manage(.*) \
https://secure.example.org/zope/example_instance/example_org/manage$1 [NC,R=301,L]
# reescribamos cualquier otro acceso al servidor zope usando un proxy [P] y agregando la seccion VMH
# usar %{SERVER_NAME} en vez de example.com para soportar el ServerAlias
# %{HTTP_HOST} es malo porque puede contener el puerto
RewriteRule ^/(.*) \
http://localhost:10080/VirtualHostBase/http/%{SERVER_NAME}:80/example_org/VirtualHostRoot/$1 [L,P]
</IfModule>
<IfModule mod_proxy.c>
ProxyVia On
# evitamos que el servidor web sea usado como proxy
<LocationMatch "^[^/]">
Deny from all
</LocationMatch>
</IfModule>
# cache (deshabilitado)
# esto hace cache de todos los archivos de /
<IfModule mod_disk_cache.c>
#CacheEnable disk /
</IfModule>
# compresion (deshabilitada)
<IfModule mod_deflate.c>
#SetOutputFilter DEFLATE
</IfModule>
</VirtualHost>
Reglas de reescritura adicionales
Reglas de reescritura para tener un acceso seguro a la administración.
Redirigimos cualquier acceso a la dirección http al servidor https:
<VirtualHost *:80>
ServerName secure.example.org
ServerAdmin webmaster@example.org
ServerSignature On
# no necesitamos un DocumentRoot para un sitio que es solo zope
#DocumentRoot /var/www/secure.example.org
CustomLog /var/log/apache2/secure.example.org-access.log combined
ErrorLog /var/log/apache2/secure.example.org-error.log
LogLevel warn
<IfModule mod_rewrite.c>
RewriteEngine On
# usa RewriteLog para depurar problemas con tus reglas de reescritura
# deshabilitar lueigo de encontrar el error, o el disco duro se llenara *muy rapido*
# RewriteLog "/var/log/apache2/rewrite_log"
# RewriteLogLevel 2
# Reescribir con el codigo de redireccion permanente
RewriteRule ^/(.*) https://secure.example.org/$1 [R=301, L]
</IfModule>
</VirtualHost>
Y ahora el servidor SSL que sirve los accesos a la administración zope:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName secure.example.org
ServerAdmin webmaster@example.org
ServerSignature On
DocumentRoot /var/www/secure.example.org-ssl
CustomLog /var/log/apache2/secure.example.org-ssl-access.log combined
ErrorLog /var/log/apache2/secure.example.org-ssl-error.log
LogLevel warn
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/crt/secure.example.org.crt
SSLCertificateKeyFile /etc/apache2/ssl/key/secure.example.org.key
<Location />
# Forzamos el uso de encriptacion ssl
SSLRequireSSL
# certificados de cliente SSL: none, optional, require
# Nota: optional no funciona con todos los navegadores
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +StrictRequire
#opcional +ExportCertData
</Location>
<IfModule mod_rewrite.c>
RewriteEngine On
# usa RewriteLog para depurar problemas con tus reglas de reescritura
# deshabilitar lueigo de encontrar el error, o el disco duro se llenara *muy rapido*
# RewriteLog "/var/log/apache2/rewrite_log"
# RewriteLogLevel 2
# Las reglas siguientes reescriben cualquier acceso a https://secure.example.org/zope/example_instance/
# a la raiz de la instancia zope en localhost:10080
RewriteRule ^/zope/main_instance$ \
http://localhost:10080/VirtualHostBase/https/secure.example.org:443/VirtualHostRoot/_vh_zope/_vh_example_instance [L,P]
RewriteRule ^/zope/main_instance/(.*) \
http://localhost:10080/VirtualHostBase/https/secure.example.org:443/VirtualHostRoot/_vh_zope/_vh_example_instance/$1 [L,P]
</IfModule>
<IfModule mod_proxy.c>
ProxyVia On
# evitamos que el servidor web sea usado como proxy
<LocationMatch "^[^/]">
Deny from all
</LocationMatch>
</IfModule>
# no intentes hacer cache de ssl!
# compresion (deshabilitada)
<IfModule mod_deflate.c>
#SetOutputFilter DEFLATE
</IfModule>
</VirtualHost>
</IfModule>