Ejecutando Plone y Zope detrás de un servidor web Apache 2
Note: This is the print view with all the tutorial pages on one page. The paginated version is available here, if you prefer that.
Prefacio y configuración de módulos de Apache 2
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.
Configuración de Zope
Configurando el servidor Zope
Ahora debemos configurar el servidor Zope. Al menos estas opciones deben cambiarse en tu etc/zope.conf:
- debug-mode on
- El modo de Debugging (depuración de errores) viene habilitado por defecto. Dejémolo habilitado hasta asegurarnos que el servidor Zope funciona bien, y luego hay que deshabilitarlo cuando el sitio esté en producción. CMF y Plone funcionan mucho más rápido cuando se deshabilita.
- effective-user zope
- Define un usuario efectivo existente, si no quieres que Zope parta con los permisos de proceso init o como root.
- locale de_DE@euro
- Habilita el uso de "locales" en Zope y lo define como de_De@euro (ISO-8859-15). Debes definir esta variable con el valor del locale por defecto del sistema. En debian usa dpkg-reconfigure -plow locales para ver una lista de locales y compilar alguno de ellos.
- datetime-format international
- Esta es una buena idea, a menos que vivas en usa.
- #ip-address unset
- Si no defines una ip entonces Zope escuchará por todas las interfaces
- port-base 10000
- Offset del puerto (ver más abajo)
- address 127.0.0.1:80 (en <http-server>)
- El servidor http se instalará en la interfaz de red loopback (localhost o 127.0.0.1) en el puerto 10080 (port-base 10000 + 80). Nadie podrá conectarse directamente a tu servidor Zope.
- cache-size 5000 (en <zodb_db main>)
- Aumenta el tamaño del cache de tu ZODB a 5000 objetos. El cache debiera ser lo más grande posible, para aumentar la velocidad de Zope, pero teniendo cuidado de que no se coma toda tu RAM. Si el cache es muy grande y tu sistema necesita usar espacio de swap en el disco duro, Zope se volverá extremadamente lento!
Si hemos definido el modo de debug es mejor utilizar $INSTANCE-HOME/bin/runzope para iniciar Zope. Así se puede leer toda la información de debug en la consola, y se puede detener Zope fácilmente, presionando CTRL+C. Después se debe deshabilitar el modo de debug y ejecutar Zope en modo daemon usando $INSTANCE-HOME/bin/zopectl. zopectl es una herramienta que se integra muy fácil en tu proceso de inicio del sistema (boot):
root@host:/$ cd /etc/init.d
root@host:/etc/init.d$ ln -s /path/to/your/zope/instance/bin/zopectl myzope
root@host:/etc/init.d$ /etc/init.d/myzope start
Configurando la instancia de Zope
Navega al ZMI (Zope management interface) de tu servidor Zope en forma directa (sin usar apache como proxy) http://localhost:10080/manage. Si no tienes un navegador en tu servidor puedes hacer que Zope escuche temporalmente en todas las interfaces quitando el 127.0.0.1 de la configuración, y reiniciando Zope.
Si tienes un servidor linux con lynx o links instalado, puedes usar este pequeño truco para evitar los problemas con los marcos (frames) y el menú para agregar:
host:/$ lynx http://localhost:10080/manage_addProduct/SiteAccess/manage_addVirtualHostMonsterForm
Agrega un Virtual Host Monster con el id VirtualHostMonster en la raíz de la instancia de Zope (asegúrate que no es en la instancia de Plone, debe ser un nivel más arriba). Puedes escoger el id que quieras, pero debe ser único para todo el sitio, así que pienso que VirtualHostMonster es una buena idea :) No agregues más de un VHM a tu instancia de Zope! Uno es suficiente para todas las subpáginas.
En este ejemplo necesitarás agregar un tipo "folderish" (por ejemplo un sitio plone en la raíz) con el id example_org en la raíz de la instancia Zope.
Host virtual en Apache 2
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>
Cómo funciona VHM
Hosting virtual con Zope
Una sección normal VHM de una regla de reescritura tiene esta forma:
^/(.*) \
http://localhost:10080/VirtualHostBase/http/www.example.org:80/example_site/VirtualHostRoot/$1
Esta dirección consta de siete partes:
- http://localhost:10080
- Esto sólo es necesario para el módulo mod_proxy. Indica qué servidor debiera ser contactado, incluyendo el protocolo, host y puerto. En este ejemplo mod_proxy está contactando el ZServer en el puerto 100080 del mismo host, usando http.
- VirtualHostBase
- Esta es la clave mágica para iniciar el hosting virtual. No debes crear ningún objeto llamado VirtualHostBase es la raíz de zope!
- http
- El primer segmento de ruta después de VirtualHostBase indica el protocolo de la url vhost.
- www.example.org:80
- El segundo segmento después de VirtualHostBase indica el servidor y puerto. Junto con el protocolo forman la parte base de la url, en este ejemplo http://www.example.org:80. Tal como VirtualHostBase, el protocolo y el servidor no son objetos reales. Se indican en la url tan solo con propósitos de configuración y son eliminados de la url después que se define el host virtual del requerimiento.
- example_site
- Ahora comienza la ruta de recorrido real en Zope. Después de indicar las partes de protocolo y servidor de la nueva url, comenzamos recorriendo a través de Zope la raíz del host virtual. Puedes agregar cero o más objetos aquí.
- VirtualHostRoot
- Finalmente hemos llegado a la clave mágica que indica la raíz del host virtual. Todo lo que va después de VirtualHostRoot será visible al navegador.
- $1 y ^/(.*)
- $1 y ^/(.*) son expresiones regulares. ^/(.*) quiere decir "Calza cualquier cosa que empiece con un / y guarda todo lo que siga después del / en la variable $1.
- Caso especial _vh_foo
-
Imagina que quieres tener http://www.example.org/foo/ como la url raíz de tu url virtual. Puedes lograr este efecto usando la declaración especial _vh_ . Cualquier segmento de la ruta que comience con _vh_ será eliminado de la url que se recorra en zope, y luego del recorrido será añadido sin el _vh_. Por ejemplo:
^/foo/(.*) \
http://localhost:10080/VirtualHostBase/http/www.example.org:80/example_site/VirtualHostRoot/_vh_foo/$1
Nota No está permitido crear un objeto llamado VirtualHostBase ni VirtualHostRoot en tu zope, ni tampoco crear un objeto con el mismo id que tu VHM. Podría funcionar, pero también puede dañar el sitio.
FastCGI en Apache2
Instalamos los paquetes que son requisitos para compilar el módulo. Instalando apache2-dev debiera bastar:
apt-get install apache2-dev
He tenido algunos problemas con con un script que no encuentra libtool, así que lo enlazamos a mano:
cd /usr/share/apache2/build
ln -s /usr/lib/libtool .
Descargamos la extensión fastcgi desde http://www.fastcgi.com/ y desempacamos el tar.gz:
wget http://www.fastcgi.com/dist/mod_fastcgi-X.X.X.tar.gz
tar -xzf mod_fastcgi-X.X.X.tar.gz
cd mod_fastcgi-X.X.X
Nota: Debido a un bug en fastcgi, necesitarás al menos el snapshot desde mediados de Abril de 2004, o la versión 2.4.3 próxima a salir.
Copiar Makefile.AP2 a Makefile:
cp Makefile.AP2 Makefile
Modificar Makefile para Apache 2, para reflejar la configuración del sistema:
#
# Makefile for Apache2
#
builddir = .
# XXX cambiar esta linea
top_dir = /usr/share/apache2
top_srcdir = ${top_dir}
top_builddir = ${top_dir}
include ${top_builddir}/build/special.mk
APXS = apxs
APACHECTL = apachectl
#DEFS=-Dmy_define=my_value
#INCLUDES=-Imy/include/dir
#LIBS=-Lmy/lib/dir -lmylib
# XXX agrega esta linea
INCLUDES=-I /usr/include/apache2 -I /usr/include/apr-0
all: local-shared-build
install: install-modules
clean:
-rm -f *.o *.lo *.slo *.la
Ejecutamos make e instalamos los módulos:
make
make install
Ahora debiéramos tener un módulo llamado mod_fastcgi.so en /usr/lib/apache2/modules.
Variables mod_proxy vs. mod_ssl
Variables mod_proxy vs. mod_ssl
Dentro de Zope no es posible acceder a las variables de ambiente especiales que agrega mod_ssl (SSLOptions +StdEnvVars) si estamos usando mod_proxy para acceder a Zope. Esto es por la forma en que funciona internamente el proxy. Todos los accesos a Zope a través del proxy transparente es un acceso nuevo, y no tiene contexto SSL. Para poder ver estar variables ambientales especiales es necesario configurar acceso CGI hacia Zope. El mejor método y el más rápido es FastCGI http://www.fastcgi.com.
Primero debemos instalar FastCGI para Apache 2, como fue explicado en la sección anterior. Una vez que mod_fastcgi esté compilado, instalado y cargado debemos reconfigurar tanto Zope como Apache2.
Lo siguiente es habilitar el servidor fast-cgi de Zope. Se puede escoger entre socket y tcp (host:port), donde socket es un poco más rápido, pero Apache2 debe tener acceso de lectura al directorio donde reside el socket. En este ejemplo INSTANCE_HOME es /var/lib/zope/example y la dirección fastcgi es $INSTANCE/var/zope.soc.
El último paso es reconfigurar Apache2. La configuración de ejemplo que sigue tiene solo las partes necesarias para fastcgi. Notar que el DocumentRoot debe existir y debe ser accesible por Apache2, pero el archivo zope.fcgi no debe existir. También se debe eliminar todas las reglas de reescritura de proxy (RewriteRules).
Configuración Apache2:
<IfModule mod_fastcgi.c>
FastCGIExternalServer /var/www/secure.example.org-ssl/zope.fcgi \
-socket /var/lib/zope/example/var/zope.soc \
-pass-header Authorization \
-pass-header Cookie \
-idle-timeout 60 \
-appConnTimeout 0
</IfModule>
<VirtualHost ...>
...
DocumentRoot /var/www/secure.example.org-ssl
...
<IfModule mod_fastcgi.c>
<Directory /var/www/secure.example.org-ssl>
AddHandler fastcgi-script .fcgi
</Directory>
</IfModule>
...
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(.*) \
/zope.fcgi/VirtualHostBase/https/secure.example.org:443/VirtualHostRoot/_vh_zope/_vh_example_instance/$1 [L]
</IfModule>
...
</VirtualHost>
Apéndice
Enlaces
Esta es una lista de enlaces (en inglés) a otros tutoriales interesantes, módulos apache y software.
Apache
- Módulos Apache 2
- Una lista de todos los módulos apache 2 disponibles, con sus opciones. Debe leerse la documentación de cada módulo si se quiere reconfigurar alguno
- Hosting Virtual
- Cómo configurar hosting virtual con apache 2. Leer la documentación del host virtual basado en nombres, y los ejemplos.
- Apache 2 SSL
- Encriptación SSL con apache 2
- Tutorial de reescritura
- Una buena introducción a cómo hacer buenas reglas de reescritura para redirección
Zope
- Acelerando Zope
- Un tutorial viejo pero bueno de cómo usar zope con apache 1 / squid. Hay muchos enlaces a otros documentos. Revísales todos!
- Virtual Host Monster
- Crea un VHM y lee el texto disponible en la pestaña "about". No hay disponible otra documentación.
Misceláneos
- TinyCA
- TinyCA es una interfaz gráfica simple escrita en Perl/Gtk que permite administrar una pequeña CA (Autoridad Certificadora). TinyCA funciona como interfaz de openssl
Preguntas frecuentes (FAQ)
Nadie me ha hecho preguntas :)
Configuración de ejemplo
El archivo de configuración de ejemplo contiene los archivos de configuración por defecto de debian (sin modificaciones), todas las configuraciones mencionadas en este tutorial, y los dos archivos "make" que crean los enlaces hash para la ruta de revocación y la ruta de certificación (tomadas de apache 1).
Archivos:
.
|-- README
|-- apache2.conf
|-- conf.d
| |-- deflate.conf
| |-- namedvirtualhost.conf
| |-- proxy.conf
| `-- ssl.conf
|-- httpd.conf
|-- magic
|-- mods-available
| |-- actions.load
| |-- asis.load
| |-- auth_anon.load
| |-- auth_dbm.load
| |-- auth_digest.load
| |-- auth_ldap.load
| |-- cache.load
| |-- cern_meta.load
| |-- cgi.load
| |-- cgid.conf
| |-- cgid.load
| |-- dav.conf
| |-- dav.load
| |-- dav_fs.conf
| |-- dav_fs.load
| |-- deflate.load
| |-- disk_cache.load
| |-- expires.load
| |-- ext-filter.load
| |-- ext_filter.load
| |-- fastcgi.load
| |-- file_cache.load
| |-- headers.load
| |-- imap.load
| |-- include.load
| |-- info.load
| |-- ldap.load
| |-- mem_cache.load
| |-- mime_magic.conf
| |-- mime_magic.load
| |-- proxy.conf
| |-- proxy.load
| |-- proxy_connect.load
| |-- proxy_ftp.load
| |-- proxy_http.load
| |-- rewrite.load
| |-- speling.load
| |-- ssl.conf
| |-- ssl.load
| |-- suexec.load
| |-- unique_id.load
| |-- userdir.conf
| |-- usertrack.load
| `-- vhost_alias.load
|-- mods-enabled
| |-- cgi.load -> ../mods-available/cgi.load
| |-- deflate.load -> ../mods-available/deflate.load
| |-- headers.load -> ../mods-available/headers.load
| |-- mime_magic.conf -> ../mods-available/mime_magic.conf
| |-- mime_magic.load -> ../mods-available/mime_magic.load
| |-- proxy.load -> ../mods-available/proxy.load
| |-- rewrite.load -> ../mods-available/rewrite.load
| `-- ssl.load -> ../mods-available/ssl.load
|-- ports.conf
|-- sites-available
| |-- default
| |-- example.org
| |-- secure.example.org
| `-- secure.example.org-ssl
|-- sites-enabled
| |-- example.org -> ../sites-available/example.org
| |-- secure.example.org -> ../sites-available/secure.example.org
| `-- secure.example.org-ssl -> ../sites-available/secure.example.org-ssl
`-- ssl
|-- crl
| |-- Makefile
| `-- README
|-- crt
| |-- Makefile
| |-- README
| `-- ca-bundle.crt
`-- key
`-- README
Créditos
El presente tutorial es una traducción al español realizada por Hugo Salgado el día 28 de enero de 2007.
La versión original en inglés se encuentra disponible en http://plone.org, titulada "Running Plone and Zope behind an Apache 2 web server", creada por Christian 'Tiran' Heimes
el 12 de febrero de 2006.
Su ubicación actual es http://plone.org/documentation/tutorial/plone-apache
Cualquier comentario o consulta del contenido por favor dirigirla al autor.
Problemas de traducción por favor dirigirlas al traductor.