SIU-Guarani/Version3.20.0/vhost
Sumario
Configuración de VirtualHost
A continuación mostraremos un ejemplo, en el que se configurarán tres hosts virtuales de Apache, para:
- Atender el acceso general a Gestión, mostrando cómo restringir por rango de IPs.
- Atender accesos públicos a Gestión, permitiendo el acceso a un conjunto limitado de operaciones (solicitud de constancias y certificados desde 3w, validación de constancias), y prohibiendo el acceso al resto del sistema.
- Atender el acceso a la interfaz de Autogestión (3w)
Para los ejemplos, asumimos que tenemos registrados los siguientes dominios:
- g3.unx.edu.ar
- g3publico.unx.edu.ar
- 3w.unx.edu.ar
1. Acceso general a Gestión
Partimos de una instalación de producción, en la que ya fueron eliminados y despublicados los proyectos toba_editor y toba_referencia. Es decir, sólo existen en la instancia los proyectos guarani y toba_usuarios.
El checkout lo tenemos en la carpeta /opt/proyectos/gestion.
Como publicaremos el proyecto guarani en la raíz del host virtual, lo dejamos establecido con el string vacío en la variable "url" del bloque de configuración del proyecto del archivo instancia.ini:
base = "guarani3"
proyectos = "toba_usuarios, guarani"
tipo = "normal"
[toba_usuarios]
path = "/opt/proyectos/gestion/lib/toba/proyectos/toba_usuarios"
url = "/toba_usuarios"
[guarani]
path = "/opt/proyectos/gestion"
url = ""
url_pers = "/guarani_pers"
Como primer paso para la configuración del VirtualHost, crearemos un archivo de configuración en algún lugar (en este ejemplo será /opt/proyectos/conf/vhosts.conf), y lo incluiremos en Apache:
A continuación, prepararemos en ese archivo el "esqueleto" de la configuración del VirtualHost, con el nombre de servidor, carpeta raíz y filtros por rango de IP:
ServerName g3.unx.edu.ar
# Como carpeta raíz establecemos el directorio navegable de Gestión
DocumentRoot "/opt/proyectos/gestion/www"
# Acá irá la configuración de proyectos
# ...
<Location />
# Filtrar acceso a Guaraní por rango de IP a la subred 10.23.10.*
Require ip 10.23.10.0/24
</Location>
<Location /toba_usuarios>
# Filtrar acceso a toba_usuarios por rango de IP 10.23.10.*
Require ip 10.23.10.0/24
</Location>
</VirtualHost>
Con el esqueleto armado, copiamos la configuración de toba.conf, teniendo en cuenta que se debe eliminar el alias de Guaraní, ya que accederemos con el nombre de servidor. La configuración de Directory de su carpeta navegable servirá de configuración del DocumentRoot del VirtualHost. La configuración completa del VirtualHost, entonces, quedaría en este ejemplo de la siguiente manera:
ServerName g3.unx.edu.ar
# Como carpeta raíz establecemos el directorio navegable de Gestión
DocumentRoot "/opt/proyectos/gestion/www"
# Recursos navegables de Toba
Alias /toba_g3 "/opt/proyectos/gestion/lib/toba/www"
<Directory "/opt/proyectos/gestion/lib/toba/www/">
SetEnv TOBA_DIR "/opt/proyectos/gestion/lib/toba"
Options MultiViews FollowSymLinks
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
#Configuracion del SP de SAML
Alias /toba_g3_sp "/opt/proyectos/gestion/lib/toba/php/3ros/simplesamlphp/www"
<Directory /opt/proyectos/gestion/lib/toba/php/3ros/simplesamlphp/www>
SetEnv TOBA_INSTALACION_DIR "/opt/proyectos/gestion/lib/toba/instalacion"
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
#Proyecto: guarani
#No hace falta definir Alias de Guaraní, sólo el directorio, porque es el DocumentRoot de este servidor
<Directory "/opt/proyectos/gestion/www/">
SetEnv TOBA_DIR "/opt/proyectos/gestion/lib/toba"
SetEnv TOBA_PROYECTO "guarani"
SetEnv TOBA_INSTALACION_DIR "/opt/proyectos/gestion/lib/toba/instalacion"
SetEnv TOBA_INSTANCIA "desarrollo"
DirectoryIndex aplicacion.php
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
#API REST
RewriteEngine On
RewriteBase /
Options FollowSymLinks SymLinksIfOwnerMatch
RewriteRule ^rest/(.*)$ rest.php/$1 [PT,L,QSA]
RewriteRule ^rest$ rest.php/ [PT,L,QSA]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
</Directory>
#Proyecto_pers: guarani
Alias /guarani_pers "/opt/proyectos/gestion/personalizacion/www"
<Directory "/opt/proyectos/gestion/personalizacion/www/">
SetEnv TOBA_DIR "/opt/proyectos/gestion/lib/toba"
SetEnv TOBA_PROYECTO "guarani"
SetEnv TOBA_INSTALACION_DIR "/opt/proyectos/gestion/lib/toba/instalacion"
SetEnv TOBA_INSTANCIA "desarrollo"
Options MultiViews
<Files rest>
ForceType application/x-httpd-php
</Files>
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
#Proyecto: toba_usuarios
Alias /toba_usuarios "/opt/proyectos/gestion/lib/toba/proyectos/toba_usuarios/www"
<Directory "/opt/proyectos/gestion/lib/toba/proyectos/toba_usuarios/www/">
SetEnv TOBA_DIR "/opt/proyectos/gestion/lib/toba"
SetEnv TOBA_PROYECTO "toba_usuarios"
SetEnv TOBA_INSTALACION_DIR "/opt/proyectos/gestion/lib/toba/instalacion"
SetEnv TOBA_INSTANCIA "desarrollo"
DirectoryIndex aplicacion.php
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
#API REST
RewriteEngine On
RewriteBase /toba_usuarios
Options FollowSymLinks SymLinksIfOwnerMatch
RewriteRule ^rest/(.*)$ rest.php/$1 [PT,L,QSA]
RewriteRule ^rest$ rest.php/ [PT,L,QSA]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
</Directory>
<Location />
# Filtrar acceso a Guaraní por rango de IP a la subred 10.23.10.*
Require ip 10.23.10.0/24
</Location>
<Location /toba_usuarios>
# Filtrar acceso a toba_usuarios por rango de IP 10.23.10.*
Require ip 10.23.10.0/24
</Location>
</VirtualHost>
Tras reiniciar Apache, podremos acceder desde la red establecida de la siguiente manera:
- Gestión: g3.unx.edu.ar
- Toba Usuarios: g3.unx.edu.ar/toba_usuarios
2. Acceso público Gestión
Este ejemplo está orientado al caso de que no se permita acceso por fuera de una intranet a Gestión, y se tenga habilitada la solicitud de Constancias y Certificados (y su consecuente validación online) en Autogestión. Esa funcionalidad requiere acceso a un conjunto limitado y protegido de operaciones de Gestión, que deben estar accesibles desde el exterior.
A tal efecto, se distribuye en la carpeta navegable del proyecto, un punto de acceso alternativo, "acceso_ext.php", que habilita el acceso público a las operaciones mencionadas, prohibiendo el acceso al resto del sistema.
La configuración de este nuevo VirtualHost será similar al anterior, con las siguientes diferencias:
- Tiene su propio ServerName (en el ejemplo, g3publico.unx.edu.ar)
- No se publica toba_usuarios (no es necesario desde un acceso público)
- En la configuración de Directory de Guaraní (la del DocumentRoot):
- Cambia el DirectoryIndex a acceso_ext.php
- Se deniega el acceso al punto de acceso principal (aplicacion.php):
- <Files aplicacion.php>
Require all denied
</Files>
Entonces, la configuración de VirtualHost de este escenario quedaría:
ServerName g3publico.unx.edu.ar
DocumentRoot "/opt/proyectos/gestion/www"
# Recursos navegables de Toba
Alias /toba_g3 "/opt/proyectos/gestion/lib/toba/www"
<Directory "/opt/proyectos/gestion/lib/toba/www/">
SetEnv TOBA_DIR "/opt/proyectos/gestion/lib/toba"
Options MultiViews FollowSymLinks
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
#Configuracion del SP de SAML
Alias /toba_g3_sp "/opt/proyectos/gestion/lib/toba/php/3ros/simplesamlphp/www"
<Directory /opt/proyectos/gestion/lib/toba/php/3ros/simplesamlphp/www>
SetEnv TOBA_INSTALACION_DIR "/opt/proyectos/gestion/lib/toba/instalacion"
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
#Proyecto: guarani
<Directory "/opt/proyectos/gestion/www/">
SetEnv TOBA_DIR "/opt/proyectos/gestion/lib/toba"
SetEnv TOBA_PROYECTO "guarani"
SetEnv TOBA_INSTALACION_DIR "/opt/proyectos/gestion/lib/toba/instalacion"
SetEnv TOBA_INSTANCIA "desarrollo"
# Cambia el DirectoryIndex
DirectoryIndex acceso_ext.php
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
#API REST
RewriteEngine On
RewriteBase /
Options FollowSymLinks SymLinksIfOwnerMatch
RewriteRule ^rest/(.*)$ rest.php/$1 [PT,L,QSA]
RewriteRule ^rest$ rest.php/ [PT,L,QSA]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
# Se deniega acceso al punto de acceso principal
<Files aplicacion.php>
Require all denied
</Files>
</Directory>
#Proyecto_pers: guarani
Alias /guarani_pers "/opt/proyectos/gestion/personalizacion/www"
<Directory "/opt/proyectos/gestion/personalizacion/www/">
SetEnv TOBA_DIR "/opt/proyectos/gestion/lib/toba"
SetEnv TOBA_PROYECTO "guarani"
SetEnv TOBA_INSTALACION_DIR "/opt/proyectos/gestion/lib/toba/instalacion"
SetEnv TOBA_INSTANCIA "desarrollo"
Options MultiViews
<Files rest>
ForceType application/x-httpd-php
</Files>
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
#Proyecto: toba_usuarios << No publicado
</VirtualHost>
3. Interfaz de Autogestión (3w)
Para la configuración de VirtualHost de 3w, nos basamos en el alias.conf, teniendo en cuenta que no configuraremos Locations (en caso de necesitar varios puntos de acceso, se pueden configurar distintos VirtualHosts). Por esa razón, incluiremos la directiva SetEnv ACC_ID xyz entro de bloque VirtualHost.
ServerName 3w.unx.edu.ar
DocumentRoot "/opt/proyectos/3w/src/siu/www"
<Directory "/opt/proyectos/3w/src/siu/www">
Options FollowSymLinks
DirectoryIndex index.php
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
AddDefaultCharset ISO-8859-1
include /opt/proyectos/3w/instalacion/rewrite.conf
</Directory>
SetEnv ACC_ID des01
</VirtualHost>