En muchas ocasiones, desarrollamos aplicaciones que no pueden ser servidas por nuestro servidor web. Aplicaciones que corren sobre node, tipo server-side-rendering u otro tipo de servidores, los cuales, sirven su aplicación en puertos distintos a los habituales de los 80 y 443 usados por Apache. Para servir este tipo de aplicaciones bajo un dominio tipo miaplicacion.com hacemos uso de los llamados proxys inversos.

Qué es un proxy inverso

Un proxy inverso es un tipo de servidor proxy que recupera recursos en nombre de un cliente desde uno o varios servidores. Estos recursos se devuelven al cliente como si hubieran originado en el propio servidor proxy. Esta función tiene múltiples aplicaciones, incluyendo balanceo de carga, caché de contenido para acelerar la carga de las páginas web, y proporcionar una capa adicional de seguridad y anonimato.

Desde el punto de vista del SEO, un proxy inverso puede ser particularmente beneficioso. Al actuar como intermediario para las solicitudes de los clientes, puede mejorar significativamente la velocidad de carga de las páginas web, lo cual es un factor importante en la clasificación de los motores de búsqueda. Los sitios web rápidos y eficientes suelen tener una mejor posición en los resultados de búsqueda, ya que proporcionan una mejor experiencia al usuario. Además, un proxy inverso puede ayudar a manejar el tráfico SSL, lo que asegura que el intercambio de datos entre el usuario y el servidor sea cifrado y seguro. La seguridad del sitio web es otro factor que los motores de búsqueda consideran al clasificar los sitios. Un sitio con un buen rendimiento de seguridad puede obtener una mejor clasificación que uno que no lo tiene.

¿Como podemos configurar Apache como proxy inverso?

A la hora de configurar un proxy inverso, las opciones más habituales son usar Apache o Nginx, en nuestro caso explicaremos su configuración con Apache.

Lo primero que debemos hacer es habilitar los siguientes módulos de Apache:

sudo a2enmod proxy
sudo a2enmod proxy_http

A continuación crearemos un virtual host, para ello creamos un archivo de configuración en la carpeta sites-availables de Apache (alojada en servidores debian en “/etc/apache”)

El archivo tendrá el siguiente contenido:

<VirtualHost *:80>
    ServerName tu-dominio.com
    ServerAlias www.tu-dominio.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Las líneas “ProxyPass” y “ProxyPassReverse” nos indican la ruta “/” o url que devolverá la petición a “http://127.0.0.1:3000/” esto es importante entenderlo, puesto que en ocasiones queremos servir nuestra aplicación en una sub-carpeta tipo “tuaplicacion.com/app” en cuyo caso deberemos sustituir “/” por “/app”

Puedes acceder a la documentación del módulo proxy de apache si quieres saber algo más o hacer algo más específico

a continuación habilitaremos el nuevo el nuevo virtual host y reiniciaremos apache:

sudo a2ensite nombre-del-archivo.conf
sudo service apache2 restart

Después de reiniciar Apache, prueba acceder a tu dominio.

HTTPS

Para su uso bajo https deberemos hacer un v-host que funcione bajo el puerto 443 y configurar los correspondientes certificados SSL.

Conclusiones

Configurar Apache como proxy inverso para tus aplicaciones SSR es un método comprobado para mejorar el rendimiento y la seguridad. Al seguir estos pasos, podrás asegurarte de que tu aplicación sea robusta y esté preparada para manejar el tráfico de manera eficiente.

En el mundo del desarrollo web se nos presentan continuos retos a superar, dominar la configuración de programas como Apache o Nginx puede hacernos el trabajo más fácil y ayudarnos a ofrecer el mejor servicio a nuestros clientes.

Si tienes dudas o necesitas más ayuda, no dudes en contactar con nosotros.