# Guía paso a paso para configurar un Proxy Inverso con Apache usando HTTPS

- Link: https://binariocero.com/linux/guia-paso-a-paso-para-configurar-un-proxy-inverso-con-apache-usando-https
- Published: 2024-06-04T23:43:24+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

Configurar un proxy inverso con Apache para manejar solicitudes HTTPS implica unos
pocos pasos adicionales en comparación con HTTP. Estos incluyen la configuración
de certificados SSL. A continuación, te ofrezco una guía detallada con ejemplos 
de configuración.

#### Requisitos previos

 1. **Servidor Apache instalado**: Asegúrate de tener Apache HTTP Server instalado 
    en tu sistema.
 2. **Módulos de proxy habilitados**: Necesitas habilitar los módulos necesarios en
    Apache para configurar el proxy inverso.
 3. **Certificados SSL**: Necesitas tener un certificado SSL y su clave privada.

#### Paso 1: Instalación de Apache

Si no tienes Apache instalado, puedes instalarlo usando el siguiente comando:

 * **En Debian/Ubuntu**:
   `sudo apt update ``sudo apt install apache2`
 * **En CentOS/RHEL**:
   `sudo yum install httpd`

#### Paso 2: Habilitar los módulos de proxy y SSL

Apache necesita los módulos `proxy`, `proxy_http`, `proxy_balancer`, `lbmethod_byrequests`
y `ssl` habilitados para funcionar como un proxy inverso con HTTPS.

 * **En Debian/Ubuntu**:
   `sudo a2enmod proxy ``sudo a2enmod proxy_http ``sudo a2enmod
   proxy_balancer ``sudo a2enmod lbmethod_byrequests ``sudo a2enmod ssl ``sudo systemctl
   restart apache2`
 * **En CentOS/RHEL**, edita el archivo de configuración principal de Apache (generalmente
   ubicado en `/etc/httpd/conf/httpd.conf`) y añade las siguientes líneas:
   `LoadModule
   proxy_module modules/mod_proxy.so ``LoadModule proxy_http_module modules/mod_proxy_http.
   so ``LoadModule proxy_balancer_module modules/mod_proxy_balancer.so ``LoadModule
   lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so ``LoadModule ssl_module
   modules/mod_ssl.so`

Luego reinicia Apache:

    ```wp-block-preformatted
    sudo systemctl restart httpd
    ```

#### Paso 3: Configuración del Proxy Inverso con HTTPS

Edita el archivo de configuración del sitio en Apache. Por lo general, este archivo
se encuentra en `/etc/apache2/sites-available/000-default-le-ssl.conf` en Debian/
Ubuntu o en `/etc/httpd/conf.d/ssl.conf` en CentOS/RHEL.

Agrega la siguiente configuración para redirigir las solicitudes HTTPS a un servidor
backend:

    ```wp-block-preformatted
    <VirtualHost *:443>    ServerName www.ejemplo.com    SSLEngine on    SSLCertificateFile /ruta/a/tu_certificado.crt    SSLCertificateKeyFile /ruta/a/tu_llave_privada.key    SSLCertificateChainFile /ruta/a/tu_cadena_certificados.crt    # Configuración de Proxy Inverso    ProxyRequests Off    ProxyPreserveHost On    <Proxy *>        Require all granted    </Proxy>    ProxyPass / http://backend.ejemplo.com/    ProxyPassReverse / http://backend.ejemplo.com/    # Log de errores    ErrorLog ${APACHE_LOG_DIR}/error.log    CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
    ```

#### Paso 4: Habilitar el sitio y reiniciar Apache

En Debian/Ubuntu, asegúrate de que el sitio esté habilitado:

    ```wp-block-preformatted
    sudo a2ensite 000-default-le-ssl.confsudo systemctl restart apache2
    ```

En CentOS/RHEL, no es necesario habilitar el sitio específicamente, pero asegúrate
de reiniciar Apache para aplicar los cambios:

    ```wp-block-preformatted
    sudo systemctl restart httpd
    ```

#### Paso 5: Verificación

Verifica que la configuración del proxy inverso esté funcionando correctamente. 
Abre un navegador web y navega a `https://www.ejemplo.com`. Deberías ver el contenido
del servidor backend.

#### Ejemplo completo de configuración

A continuación, un ejemplo completo de un archivo de configuración para un sitio
en Debian/Ubuntu:

    ```wp-block-preformatted
    <VirtualHost *:443>    ServerName www.ejemplo.com    SSLEngine on    SSLCertificateFile /etc/ssl/certs/ejemplo.com.crt    SSLCertificateKeyFile /etc/ssl/private/ejemplo.com.key    SSLCertificateChainFile /etc/ssl/certs/chain.crt    ProxyRequests Off    ProxyPreserveHost On    <Proxy *>        Require all granted    </Proxy>    ProxyPass / http://backend.ejemplo.com/    ProxyPassReverse / http://backend.ejemplo.com/    ErrorLog ${APACHE_LOG_DIR}/error.log    CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
    ```

 2. **Archivo de configuración en `/etc/httpd/conf.d/ssl.conf` para CentOS/RHEL**:

    ```wp-block-preformatted
    <VirtualHost *:443>    ServerName www.ejemplo.com    SSLEngine on    SSLCertificateFile /etc/ssl/certs/ejemplo.com.crt    SSLCertificateKeyFile /etc/ssl/private/ejemplo.com.key    SSLCertificateChainFile /etc/ssl/certs/chain.crt    ProxyRequests Off    ProxyPreserveHost On    <Proxy *>        Require all granted    </Proxy>    ProxyPass / http://backend.ejemplo.com/    ProxyPassReverse / http://backend.ejemplo.com/    ErrorLog /var/log/httpd/error.log    CustomLog /var/log/httpd/access.log combined</VirtualHost>
    ```

Con esta guía, deberías poder configurar un proxy inverso utilizando Apache HTTP
Server con soporte para HTTPS. Si encuentras algún problema, asegúrate de revisar
los archivos de log de Apache para obtener más información sobre posibles errores.
