Autor(es): | Leonardo J. Caballero G. |
---|---|
Correo(s): | leonardocaballero@gmail.com |
Lanzamiento: | 0.1 |
Fecha: | 16 de Feb del 2013 |
Este documento busca explicar los conceptos intrínsecos para instalar y configurar un servidor Web en frente del servidor Zope/Plone.
Cuando se configura el servidor Zope y Plone detrás de un servidor Web generalmente se hace como servidor proxy reverso y existentes varias razones para este tipo de configuración:
El servidor Zope viene con un objeto llamado “Virtual Host Monster” que le ayuda a hacer configuraciones de hosting virtual. La técnica de hosting virtual es una forma de servir a muchos sitios web con un servidor Zope.
Hay que entender varios conceptos antes de continuar:
EL objeto Virtual Host Monster enmascara la dirección URL devuelta por el servidor Zope como response la cual es publicada como http://www.cliente1.com/ en lugar de http://127.0.0.1:8080/. Está instalado previamente en el servidor Zope (este objeto se llama virtual_hosting y se encuentra en el directorio del raíz del servidor Zope y puede ser consultado desde la interfaz administrativa de Zope) y no necesita ninguna configuración en Zope.
Su configuración sólo se produce a través de una regla de reescritura de la dirección URL, adicionalmente se debe configurar su servidor web como un proxy inverso hacia el servidor Zope.
La regla de reescritura de la dirección URL de VHM luce algo así:
^/(.*) \
http://127.0.0.1:8080/VirtualHostBase/http/intranet.cliente1.com:80/cliente1_intranet/VirtualHostRoot/$1
Esta dirección URL de VHM previa tiene siete partes:
¿Qué significa eso? Bueno, esto es una expresión regular, que coincide con casi todo. Voy a explicarlo con calma:
En pocas palabras ^/(.*) significa Coincidir todo lo que empieza con un ``/`` y guardar todos los caracteres después del carácter ``/``, esto luego es procesado por la variable $1 que mas adelante se explica que función cumple.
Imagine que usted quiere tener http://intranet.cliente1.com/documentos/ como la dirección URL de su dirección URL virtual. Entonces usted puede obtener el efecto usando la declaración especial _vh_. Cualquier segmento de ruta iniciando con _vh_ es despojado de la dirección URL para ser recorrido a través de Zope y volver a ser agregado sin _vh_ después de recorrido.
Un ejemplo:
^/documentos/(.*) \
http://127.0.0.1:8080/VirtualHostBase/http/intranet.cliente1.com:80/cliente1_intranet/VirtualHostRoot/_vh_documentos/$1
Nota
Usted no puede crear un objeto llamado VirtualHostBase o VirtualHostRoot en su Zope ni debe agregar un objeto con el mismo ID de su VHM. Es posible que funcione, pero también puede dañar el sitio.
A continuación se explica como instalar el servidor Web Nginx y configurarlo con Zope, a través de técnicas de reescritura URL.
Para instalar debe iniciar sesión como usuario “root” ejecute el siguiente comando:
# aptitude install nginx
Luego se debe agregar la configuración respectiva en Nginx con el siguiente comando:
# vim /etc/nginx/nginx.conf
Y agregue la siguiente configuración:
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
server_names_hash_bucket_size 64;
server_name_in_redirect off;
server_tokens off;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Y defina la política de virtual host del sitio, con el siguiente comando:
# vim /etc/nginx/sites-available/cliente1-intranet
Agregue la siguiente configuración:
server {
# DNS/IP y Puerto en que escucha la aplicación
listen *:80;
# Nombre del servidor
server_name intranet.cliente1.com;
# Tamaño máximo de subida de archivos
client_max_body_size 24M;
# Tamaño máximo de buffer de archivos
client_body_buffer_size 128K;
# Archivo de registro de acceso del sitio web
access_log /var/log/nginx/cliente1-intranet.access.log;
# Archivo de registro de error del sitio web
error_log /var/log/nginx/cliente1-intranet.error.log error;
# Interfaz Administrativa de Zope
location /manage {
proxy_pass http://127.0.0.1:8080/VirtualHostBase/http/intranet.cliente1.com:80/manage_main/VirtualHostRoot/;
proxy_set_header Host $host;
}
# Intranet del cliente1
location / {
proxy_pass http://127.0.0.1:8080/VirtualHostBase/http/intranet.cliente1.com:80/cliente1_intranet/VirtualHostRoot/;
proxy_set_header Host $host;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
Realice un enlace simbólico desde el directorio de Nginx sites-available/ al directorio sites-enabled/, para que su configuración previa este disponible:
# ln -s /etc/nginx/sites-available/cliente1-intranet /etc/nginx/sites-enabled/cliente1-intranet
Luego reinicie su servidor Nginx con el siguiente comando:
# /etc/init.d/nginx reload
A continuación se explica como instalar el servidor Web Apache 2 y configurarlo como un Proxy inverso con Zope, además aplicando técnicas de reescritura URL.
Hay que entender varios conceptos antes de continuar:
Para instalar debe iniciar sesión como usuario “root” ejecute el siguiente comando:
# aptitude install apache2
Próximo paso es habilitar mod_proxy y mod_rewrite.
Módulo mod_rewrite: Es usado como un motor de reescritura basado en reglas para reescribir direcciones URL solicitadas en tiempo de ejecución, es decir le permite a usted apuntar a una dirección URL en otra dirección URL. Para habilitar ese módulo debe ejecutar el siguiente comando:
# a2enmod proxy
Enabling module proxy.
Run '/etc/init.d/apache2 restart' to activate new configuration!
Módulo mod_proxy: Es un Proxy inverso que le permite apuntar a una dirección URL en otro servidor en otro puerto. Este sirve como un traductor, para que el usuario nunca se comunique con cualquier otro servicio que use otro puerto que no sea el 80, es decir es un intermediario transparente hacia otro sitio. Con este módulo los usuarios pueden ir de Plone hacia una aplicación PHP, y luego a una aplicación Java y nunca saberlo. Para habilitar ese módulo debe ejecutar el siguiente comando:
# a2enmod rewrite
Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!
Luego puede editar la configuración del módulo mod_proxy, con el siguiente comando:
# vim /etc/apache2/mods-enabled/proxy.conf
Ahora, encontramos los siguientes ajustes y coinciden con lo que tengo aquí. Siga exactamente esto, o usted podría terminar con teniendo un proxy abierto que permite a otros rebote a través de su máquina para llegar a cualquier lugar que desee de forma anónima, enviar spam, etc. Hagas lo que hagas, nunca active su *ProxyRequests On*.
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
#Deny from all
Allow from all
</Proxy>
Y defina la política de virtual host del sitio, con el siguiente comando:
# vim /etc/apache2/sites-available/cliente1-intranet
Agregue la siguiente configuración:
<VirtualHost *:80>
ServerName www.cliente1.com
ServerAlias intranet.cliente1.com
ServerAdmin webmaster@intranet.cliente1.com
ServerSignature On
CustomLog /var/log/apache2/cliente1-intranet-access.log combined
ErrorLog /var/log/apache2/cliente1-intranet-error.log
LogLevel warn
# registro del rebajar la tasa de compresión a un archivo
#CustomLog /var/log/apache2/deflate_log deflate
<IfModule mod_rewrite.c>
RewriteEngine On
# uso RewriteLog para la depuración de problemas con sus reglas de reescritura
# debe desactivar después de encontrar el error, ya que el disco duro se llenaría *muy rápido*
# RewriteLog "/var/log/apache2/rewrite_log"
# RewriteLogLevel 2
# sirviendo los iconos desde el servidor Apache 2
RewriteRule ^/icons/ - [L]
# reescribir cualquier acceso al ZMI en un servidor seguro
# RewriteRule ^/(.*)/manage(.*) \
# https://secure.cliente1.com/Zope/cliente1_instance/cliente1_com/$1/manage$2 [NC,R=301,L]
# RewriteRule ^/manage(.*) \
# https://secure.cliente1.com/Zope/cliente1_instance/cliente1_com/manage$1 [NC,R=301,L]
# reescribir cualquier otro acceso al servidor Zope usando un proxy [P]
# y añadir las palabras claves mágicas del VMH.
# usar la variable de servidor %{SERVER_NAME} en lugar de cliente1.com
# para evitar que se desborde la directiva ServerAlias,
# usar la variable de servidor %{HTTP_HOST} no es recomendable ya que puede contener el puerto
RewriteRule ^/manage/(.*) \
http://127.0.0.1:8080/VirtualHostBase/http/%{SERVER_NAME}:80/manage_main/VirtualHostRoot/$1 [L,P]
RewriteRule ^/(.*) \
http://127.0.0.1:8080/VirtualHostBase/http/%{SERVER_NAME}:80/cliente1_intranet/VirtualHostRoot/$1 [L,P]
</IfModule>
<IfModule mod_proxy.c>
ProxyVia On
# evitar que el servidor web sea utilizado como proxy
<LocationMatch "^[^/]">
Deny from all
</LocationMatch>
</IfModule>
# almacenamiento en caché (inhabilitado)
# esto cacheará todos los archivos con la información correcta de caché a partir /
<IfModule mod_mem_cache.c>
# CacheEnable mem /
</IfModule>
# compresión (inhabilitado)
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
</IfModule>
</VirtualHost>
Realice un enlace simbólico desde el directorio de Apache 2.2 sites-available/ al directorio sites-enabled/, para que su configuración previa este disponible
# ln -s /etc/apache2/sites-available/cliente1-intranet /etc/apache2/sites-enabled/cliente1-intranet
A continuación, algunas configuraciones muy características:
Tener un nombre de host completo (es decir, todo bajo “/”) que es servido por un único sitio Plone, añade esto a su configuración de VirtualHost de Apache la siguiente configuración:
RewriteEngine On
RewriteRule ^/(.*)$
http://127.0.0.1:8080/VirtualHostBase/http/%{SERVER_NAME}:80/cliente1_intranet/VirtualHostRoot/$1 [L,P]
Alternativamente, usted podría mapear su sitio Plone dentro de un sub- directorio de un sitio existente sin subsumirlo como todo el sitio. ¿Para hacer esto hay es usar una regla de reescritura ligeramente diferente?. En primer lugar, lo mejor es crear un sitio Plone con un ID que coincida con el nombre de directorio en el que desea que el sitio este publicado. Por ejemplo, si desea que la dirección URL de su sitio Plone sea así:
http://cliente1.com/cliente1_intranet
Entonces debería crear su sitio Plone con el identificador cliente1_intranet. Para aparejar eso a este sitio que se muestra cuando usted navega a la dirección http://cliente1.com/cliente1_intranet, debe especificar la reescritura de la siguiente forma:
RewriteEngine On
RewriteRule ^/cliente1_intranet($|/.*) http://127.0.0.1:8080/VirtualHostBase/http/%{SERVER_NAME}:80/VirtualHostRoot/cliente1_intranet$1 [L,P]
Si usted quiere soportar acceso seguro HTTPS a su sitio Plone, es algo parecida la regla de reescritura anterior para su VirtualHost. Cambie “http” a “https” y cambiar los números de puerto de “80” a “443”, de esta forma:
RewriteRule ^/(.*)$ \
http://127.0.0.1:8080/VirtualHostBase/https/%{SERVER_NAME}:443/VirtualHostRoot/$1 [L,P]
Más información http://plone.org/documentation/kb/apache-ssl
Si usted tiene necesidades mas exóticas, tome un tiempo y lea la página de Virtual Host Monster, y considere tener a la mano el RewriteRule Witch, el cual es un generador de directivas RewriteRule de Apache para Virtual Host en Zope.
Luego reinicie su servidor Nginx con el siguiente comando:
# /etc/init.d/apache2 reload
En el caso de que usted ha establecido reglas de virtual hosting de modo que ya no se Zope le permiten acceder a la interfaz de gestión, puede agregar _SUPPRESS_ACCESSRULE" a la dirección URL para desactivar VirtualHostMonster.
El código fuente de este archivo esta hospedado en GitHub. Todos pueden actualizar y corregir errores en este documento con unos clic - sin necesidad de descargar.
Para mas información básica acerca de como actualizar este manual y referencia a sintaxis Sphinx, por favor consulte la guía Escribiendo y actualizando el manual.