Cómo configurar Apache como proxy inverso (Ubuntu)

Normalmente en estos días usamos Nginx como proxy inverso. Aquí les mostraré cómo configurar Apache como proxy inverso en una instancia de servidor de nube única que ejecuta Ubuntu 16.04 para IPv4. Los recursos necesarios es muy pequeño, podemos utilizar 1 GB de RAM. Configuraremos Apache como un proxy inverso en modo básico usando la extensión mod_proxy para redirigir las conexiones entrantes a uno o varios servidores backend.

 

Módulos necesarios para configurar Apache como proxy inverso

Esta es la listade módulos necesarios para configurar Apache como proxy inverso:

  • Mod_proxy: el módulo proxy núcleo Módulo Apache para redirigir conexiones
  • Mod_proxy_balancer: agrega funciones de equilibrio de carga.
  • Mod_lbmethod_byrequests: agrega funciones de equilibrio de carga.
  • Mod_proxy_ftp: Esto maneja la recuperación de documentos con FTP.
  • Mod_proxy_connect: Esto maneja el método CONNECT para el túnel seguro.
  • Mod_proxy_ajp: Esto maneja el protocolo AJP para Tomcat como servidores back-end.
  • Mod_proxy_html: Esto reescribe los enlaces HTML en el espacio de direcciones de un proxy.
  • Mod_xml2enc: Esto es compatible con la internacionalización de mod_proxy_html.
  • Mod_headers: Modifica los encabezados de solicitud y respuesta HTTP.
  • Mod_deflate: Negocia la compresión con clientes y backends.
  • Mod_cache: Para habilitar el almacenamiento en caché.
  • Mod_disk_cache: Para habilitar el almacenamiento en caché.
  • Mod_mem_cache: Para habilitar el almacenamiento en caché.

Cómo configurar Apache como proxy inverso

Primero actualize el cache de los repositorios

apt update -y
apt upgrade -y

Ahora, instalaremos Apache en nuestro servidor:

apt install apache2 -y

Una vez que Apache se ha instalado, debemos iniciar el servicio Apache, configurarlo para que se inicie automáticamente el reinicio al reiniciar:

sudo /etc/init.d/apache2 start
sudo update-rc.d apache2 defaults

Tenemos que instalar mod_proxy y dependencias:

apt install libapache2-mod-proxy-html libxml2-dev build-essential -y

Ejecute el siguiente comando para obtener la lista de módulos disponibles:

sudo a2enmod

Necesitamos ejecutar comandos para habilitar los módulos que necesitamos, uno por uno:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp
sudo a2enmod rewrite
sudo a2enmod deflate
sudo a2enmod headers
sudo a2enmod proxy_balancer
sudo a2enmod proxy_connect
sudo a2enmod proxy_html

El archivo de configuración de Apache por defecto es generalmente 000-default.conf, podemos crear nuestro propio archivo de host virtual en /etc/apache2/sites-available:

sudo a2dissite 000-default
touch /etc/apache2/sites-available/proxy-http
nano /etc/apache2/sites-available/proxy-http

Ahora, agregue algo como esto en ese archivo /etc/apache2/sites-available/proxy-http:

ServerAdmin admin@example.com
  DocumentRoot /var/www/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  ProxyPreserveHost On
  ProxyPass / http://server-ip-address:8080/
  ProxyPassReverse / http://server-ip-address:8080/
  ServerName example.com

Guarde y cierre el archivo. Habilitar nuevo archivo de host virtual:

sudo a2ensite proxy-http

Podemos también necesitar dirigir Apache para escuchar en el puerto 8080. Eso se puede hacer editando el archivo ports.conf:

nano /etc/apache2/ports.conf

La directiva será:

Listen 8080

Para que surta efecto este cambio se debe reiniciar:

sudo /etc/init.d/apache2 restart

En el anterior cambio de puerto, http://i.p.a.d.d.r.e.ss:80 mostrará la aplicación que se está ejecutando en http://i.p.a.d.d.r.e.ss:8080. Si queremos habilitar el soporte SSL, entonces necesitaremos habilitar primero el módulo SSL.

sudo a2enmod ssl
sudo /etc/init.d/apache2 restart

Podemos copiar todos los archivos de certificados en el directorio /etc/apache2/ssl. Vamos a crear un nuevo archivo de host virtual llamado proxy-https:

nano /etc/apache2/sites-available/proxy-https

Aquí está ejemplo de configuración:

ServerAdmin admin@example.com
        DocumentRoot /var/www/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/ca.crt
        SSLCertificateKeyFile /etc/apache2/ssl/ca.key
        ProxyPreserveHost On
        ProxyPass /var/www/ http://server-ip-address:8080/
        ProxyPassReverse /var/www/ http://server-ip-address:8080/
        ServerName example.com

Guarde y cierre el archivo. Habilitar nuevo archivo de host virtual:

sudo a2ensite proxy-https
sudo /etc/init.d/apache2 restart

Conclusión:

Hay una gran documentación en el sitio de Apache: https://httpd.apache.org/docs/2.4/mod/mod_proxy.html

He proporcionado ejemplos bastante básicos sobre cómo configurar Apache como proxy inverso, pero posiblemente esa es la parte crítica.

Deja un comentario