Prefacio y configuración de módulos de Apache 2
Christian 'Tiran' Heimes
Requisitos
- Apache 2 instalado y funcionando
- Los siguientes módulos de Apache 2 deben estar instalados (deberían venir con la instalación de Apache 2 por defecto)
- mod_cache
- mod_deflate
- mod_disk_cache
- mod_headers
- mod_mime_magic
- mod_proxy
- mod_proxy_http
- mod_rewrite
- Zope instalado y funcionando
Este tutorial se enfoca en Zope 2.7 con Python 2.3.3, pero debería funcionar con cualquier versión de zope2. Para Zope 2.7 se necesita
- Zope 2.7 con fuentes, desde un tar.gz o del repositorio cvs (Zope-2_7-branch) en http://zope.org/
- Python 2.3.3 con unicode activado (python2.3)
- python2.3-xml (PyXML)
- python2.3-dev (headers, distutils)
- python2.3-psyco (python code optimizer)
- algunos paquetes adicionales como python2.3-docutils (reST), python2-3-imaging (PIL)
Objetivo
Tener un servidor Apache 2 server escuchando en los puertos http y https de todas las interfaces. El sitio http://example.org/ será zope con http://www.example.org/ como alias. Cualquier solicitud a una url de administración será reescrita hacia https://secure.example.org/ para tener un acceso seguro. El servidor http de zope estará escuchando en el puerto 10080 de localhost y el sitio estará almacenado en /example_org/.
Estructura de directorios Apache 2
Debian usa la siguiente jerarquía de directorios para Apache 2
- /etc/apache2/
- directorio de base para todos los archivos de configuración
- /etc/apache2/apache2.conf
- archivo de configuración principal. Este archivo carga todas las otras configuraciones de los directorios mencionados abajo.
- /etc/apache2/ports.conf
- archivo de configuración para Listen $Port
- /etc/apache2/conf.d
- directorio con opciones de configuración adicionales
- /etc/apache2/sites-available
- sitios disponibles
- /etc/apache2/sites-enabled
- sitios habilitados, puede contener softlinks (enlaces débiles) a archivos en /etc/apache2/site-available. Sólo se cargan estos sitios
- /etc/apache2/mods-available
- módulos disponibles (*.load) y configuración de los módulos (*.conf)
- /etc/apache2/modules-enabled
- módulos habilitados, puede contener softlinks a archivos en /etc/apache2/mods-available. Sólo se cargan estos módulos. Además se debe enlazar el archivo conf, si existe.
- /etc/apache2/ssl
- directorio que contiene los archivos de certificados ssl. Sugiero crear los 3 directorios crl, crt y key acá.
Para habilitar un sitio o un módulo, haz un symlink hacia él desde el directorio -available hacia el directorio -enabled:
user@myhost:/etc/apache2/sites-enabled$ ln -s ../sites-available/default
Cargando los módulos Apache 2
Los usuarios Debian pueden usar los archivos por defecto.
deflate.load:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
headers.load:
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
mime_magic.load:
LoadModule mime_magic_module /usr/lib/apache2/modules/mod_mime_magic.so
mime_magic.conf:
<IfModule mod_mime_magic.c>
MIMEMagicFile /etc/apache2/magic
</IfModule>
proxy.load:
LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so
LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
proxy.conf
No hacer un symlink! Usaremos nuestro propio archivo de configuración.
rewrite.load:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
ssl.load
No hacer un symlink a menos que tengamos una configuración válida y todas las llaves ssl necesarias:
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
ssl.conf
No hacer un symlink! Usaremos nuestro propio archivo de configuración.
Después de haber revisado o creado estos archivos, haz un symlink a todos los archivos en mods-enabled. Ten en cuenta que el orden de carga de los módulos es muy importante. Si ya existen algunos archivos en el directorio mods-enabled, asegurémonos que ningún módulo es cargado dos veces!
Configuraciones propias
Crea los siguientes archivos en /etc/apache2/conf.d. Estos archivos contienen nuestras propias configuraciones, así no nos mezclamos con las que trae debian por defecto.
deflate.conf:
<IfModule mod_deflate.c>
DeflateCompressionLevel 3
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
#BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images, java scripts and style sheets
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|js|css)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
# this needs mod_headers but it's very important
# so I don't add a IfModule around it
Header append Vary User-Agent env=!dont-vary
</IfModule>
namevirtualhost.conf:
# agregaremos la configuracion despues
proxy.conf (puedes copiar el archivo desde mods-available y modificarlo):
<IfModule mod_proxy.c>
#dejar ProxyRequests on y permitir proxying from all puede permitir
#a spammers usar tu proxy para enviar email.
ProxyRequests Off
#<Proxy *>
# Order deny,allow
# Deny from all
# #Allow from .your_domain.com
#</Proxy>
# permitimos conectarse a localhost con un puerto terminado con 80 y 90 (www, webdav)
# y que tenga al menos 2 dígitos antes del 80 o 90
<ProxyMatch http://localhost:[0-9]{2,}?[8|9]0/.*>
Order deny,allow
Allow from all
</ProxyMatch>
# Habilita/deshabilita el manejo de encabezados HTTP/1.1 "Via:".
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
ProxyVia On
# Para habilitar el cache, edita y descomenta las siguientes lineas:
# (no hay cache sin CacheRoot)
CacheRoot "/var/cache/apache2/proxy"
# 300MB
CacheSize 307200
# in hours
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
CacheForceCompletion 100
# Probablemente necesites cambiar esto tambien.
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
</IfModule>
ssl.conf:
<IfModule mod_ssl.c>
SSLEngine on
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# path to a directory containing the ssl ca keyring and revocation list
# you must create hash symlinks using the right Makefile!
SSLCACertificatePath /etc/apache2/crt/
SSLCARevocationPath /etc/apache2/crl/
SSLSessionCache shm:/var/log/apache2/ssl_scache(128000)
SSLMutex sem
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512
</IfModule>
Si crees que todo está bien, reinicia apache2:
$ /etc/init.d/apache2 restart
Preparando virtual hosting
Virtual hosting significa servir más de un dominio desde la misma dirección ip. Los servidores web Apache 2 saben qué dominio quiere el navegador usando el nombre de dominio que es enviado por él. Por lo tanto, no es posible usar virtual hosting en http seguro (https, http sobre ssl) debido a que la negociaciónssl debe hacerse antes que comience la negociación por el nombre de dominio. Es una vergüenza que los navegadores y servidores web no soporten TLS.
Revisa el archivo /etc/apache2/ports.conf y ve si Apache 2 está escuchando en el puerto por defecto para http:
Listen 80
Si quieres usar SSL, debes escuchar en el puerto por defecto para https también:
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
Si tienes múltiples interfaces de red y/o direcciones ip, puedes obligar a Apache a usar una dirección única:
Listen 192.168.7.1:80
Ahora necesitas configurar Apache 2 para usar NameVirtualHost para virtual hosting. Esta es la configuración más simple porque solo necesitas indicar el nombre del srvidor y la dirección/puerto en cada sección del dominio virtual. Modifica el archivo /etc/apache2/conf.d/namevirtualhost.conf y agrega la siguiente línea:
NameVirtualHost *:80
<IfModule mod_ssl.c>
NameVirtualHost *:443
</IfModule>
Estas líneas se parecen a las de ports.conf pero sin el *: inicial, si Apache 2 escucha en todas las direcciones.
Reinicia Apache 2 y ve si puedes navegar a tu servidor. Quizás Apache 2 se queje de que no puede encontrar ningún virtual hosts que calce con la configuración de NameVirtualHost, pero eso no es problema. Lo arreglaremos más tarde.