En ocasiones tenemos servicios o aplicaciones web que escuchan directamente a un puerto interno. Para evitar acceder a dicha aplicación o servicio por la IP del servidor, una configuración que podemos hacer es acceder desde un Apache Proxy.

Esta configuración nos da algunas ventajas, ya que podemos configurar un subdominio o dominio y por lo tanto configurar acceso HTTPS.

En este tutorial vamos a explicar como configurar Apache para que haga de proxy para acceder al puerto de forma interna y que sea Apache quien responda a la petición desde fuera. Por lo tanto, contamos que Apache ya está configurado en el servidor.

Configuración de Apache Proxy

Lo primero que habrá que hacer es cargar los módulos necesarios para usar Apache como Proxy Inverso:

a2enmod proxy
a2enmod proxy_http

Luego deberemos que crear o editar nuestro fichero de configuración para Apache de nuestra aplicación, por lo general se debería de encontrar en /etc/apache2/sites-enabled y deberemos de tener el siguiente contenido:

<VirtualHost *:443>

    ServerName [SUB_DOMINIO]
    DocumentRoot /var/www/vhosts/tudominio.com/www

    <Directory /var/www/vhosts/tudominio.com/www>
	AllowOverride All
	Order Allow,Deny
	Allow from All
    </Directory>

    <Location />
        Order allow,deny
        Allow from all
        ProxyPass / http://localhost:[PUERTO_INTERNO]
        ProxyPassReverse / http://localhost:[PUERTO_INTERNO]
    </Location>

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

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/[SUB_DOMINIO]/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/[SUB_DOMINIO]/privkey.pem
</VirtualHost>

Deberemos de tener en cuenta, de que tenemos que cambiar algunos parámetros de esa configuración. Lo primero será configurar correctamente el ServerName y cambiar [SUB_DOMINIO] por un dominio o subdominio que queramos que tenga nuestra aplicación o servicio. Por otro lado, deberemos de modificar el ProxyPass y ProxyPassReverse para cambiar el [PUERTO_INTERNO] por el puerto que esté utilizando nuestra aplicación o servicio.

Por ejemplo, para Grafana que escucha internamente por el puerto 3000, la configuración sería la siguiente:

<VirtualHost *:443>

    ServerName grafana.voidnull.es
    DocumentRoot /var/www/vhosts/grafana.voidnull.es/www

    <Directory /var/www/vhosts/grafana.voidnull.es/www>
	AllowOverride All
	Order Allow,Deny
	Allow from All
    </Directory>

    <Location />
        Order allow,deny
        Allow from all
        ProxyPass / http://localhost:3000
        ProxyPassReverse / http://localhost:3000
    </Location>

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

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/grafana.voidnull.es/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/grafana.voidnull.es/privkey.pem
</VirtualHost>

Con esta configuración, sería suficiente para acceder por dominio a nuestra aplicación. Únicamente queda reiniciar Apache2 tras comprobar la sintaxis y luego crear el certificado con certbot.

# apachectl -t
# systemctl restart apache2
Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación