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 [email protected] 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 [email protected] 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.