Versión apache2 en Linux Debian
Para empezar explicare como funciona un servidor proxy, según Wikipedia, y en sencillas palabras; Un proxy, en una red informática, es un programa o dispositivo que realiza una acción en representación de otro, esto es, si una hipotética máquina A solicita un recurso a una C, lo hará mediante una petición a B; C entonces no sabrá que la petición procedió originalmente de A.
Instalación y Configuración
Lo primero que debemos hacer es instalar
Apache2
#apt-get
install apache2
Para
verificar que el servicio se haya instalado bastara con ver la dirección http://localhost
Si nos
arroja la siguiente ventana es que el servicio está arriba:
La instalación
del Apache2 nos deja una estructura de carpetas y archivos en /etc/apache2 en
la cual podemos ver que las carpetas existen en pares:
conf-available conf-enabled
· mods-available mods-enabled
· sites-available sites-enabled
Adicional a
esto se encuentra el archivo de configuración apache2.conf entre otros.
Como podrán
deducir, en una carpeta se encuentra lo “disponible” para usar y en la otra se encuentra lo "habilitado".
El apache
cuenta con 2 comandos básicos para habilitar y deshabilitar los módulos y
sitios.
- a2ensite
y a2enmod para habilitar sitios y módulos respectivamente.
- a2dissite
y a2dismod para inhabilitar sitios y módulos respectivamente.
Nota: Los
modulos pueden ser instalados de manera adicional en caso de no contener alguno
que necesitemos.
Dentro de
la carpeta sites-available nos trae dos sitios 000-default.conf y default-ssl.conf, uno para el puerto
80 y otro para el puerto 443 (http y https respectivamente), de estos sitios podemos crear una copia para editarlos y ahí
construir nuestro servicio proxy. (nos posicionamos en la carpeta /etc/apache2/sites-available
#cp 000-default.conf
/etc/apache2/sites-available/servicios.conf
#cp default-ssl.conf /etc/apache2/sites-available/servicios-ssl.conf
Ahora se
tiene que habilitar los módulos que utilizaremos:
#a2enmod proxy
#a2enmod proxy_http
#a2enmod proxy_ajp
#a2enmod rewrite
#a2enmod deflate
#a2enmod headers
#a2enmod proxy_balancer
#a2enmod proxy_connect
#a2enmod proxy_html
Muy a menudo se desea configurar un
servidor Apache como front-end para ocultar los servidores que contienen
realmente las aplicaciones web. De este modo, sólo el Apache está en la DMZ,
mientras que el servidor de back-end queda dentro de la red interna:
esquema_dmz
Este esquema se puede utilizar sin
importar el protocolo o puerto que utilice el servidor de back-end. Para poder
implementar el proxy es necesario que el servidor apache tenga habilitados una
serie de módulos, que dependen del protocolo a través del cual se desea atacar
el servidor de back-end. En este ejemplo voy a suponer que el servidor de
back-end está escuchando por el puerto 80.
Para el ejemplo utilizaremos los
siguientes parámetros:
Servidor proxy: proxy.solovidabien.com
Administrador: administrador@solovidabien.com
Servidor destino:
destino.solovidabien:8080/consulta
<VirtualHost *:80>
ErrorLog
"/var/log/apache2/frontend-error.log"
CustomLog
"/var/log/apache2/frontend-access.log" common
ServerName
proxy.solovidabien.com
ServerAdmin
administrador@solovidabien.com
ProxyRequests Off
ProxyPreserveHost On
DocumentRoot
/var/www/html
ProxyPass /consulta
http://destino.solovidabien:8080/consulta/
ProxyPassReverse /consulta/ http://destino.solovidabien:8080/consulta/
SetOutputFilter proxy-html
RequestHeader unset Accept-Encoding
</VirtualHost>
Nota: Todo el archivo puede o no quedar
igual, puesto que hay archivos que traen texto y otras opciones, pero lo
importante es que cuente con los parametros antes escritos.
La directiva
"ServerName" hace
referencia a la URL a la que se dirige la petición. Deberá configurarse una
entrada en el DNS que apunte al servidor.
La directiva
ServerAdmin hace referencia al
correo electrónico de contacto del administrador del servicio.
La directiva DocumentRoot /var/www/html hace
referencia a la dirección de nuestro html local si contaramos con uno, de no
llevar este parámetro no podríamos alojar una pagina web de manera local en el servidor.
La directiva
ProxyRequests Off evita que el
front-end sea utilizado como proxy, es decir, que usuarios puedan saltar al
front-end y de ahí a cualquier otra dirección. Es muy importante dejarlo
deshabilitado para evitar problemas de seguridad o incluso legales.
La directiva
ProxyPreserveHost On permite que el
salto del servidor de front-end al de back-end sea transparente para el
usuario. Si no estuviera habilitada, el usuario se dirigiría a http://proxy.solovidabien.com
pero inmediatamente vería como la dirección cambia a http://destino.solovidabien.com.
Además, como en este supuesto el servidor de back-end no es visible desde
Internet el usuario vería un error.
Por último,
las directivas ProxyPass y ProxyPassReverse gestionan el salto y
la vuelta del servidor de front-end al de back-end.
Una vez configurado nuestro vhost con el nombre servicios.conf solo nos queda habilitarlo y reiniciar el servicio con los siguientes comandos:
#a2ensite
servicios.conf
#service
apache2 reload
Con esto ya
tendremos habilitado nuestro servidor proxy, para el puerto 80.
Como habilitar
el puerto 443 (https)
Hola. excelente post! como puedo usar esta funcionalidad para habilitar el header Authorization y evitar el bloqueo por CORS ?
ResponderEliminar