Proxy reverso con Apache

En general muchas de las herramientas web que se suelen utilizar, para acceder a ellas hay que hacerlo mediante una IP y un puerto. Esto a veces es un poco tedioso porque hay que acordarse que puerto corresponde a que servicio. Para solucionar esto, se puede hacer un Proxy reversible con apache que esto es; indicándole una porque url se va a acceder al servicio, apache te redirija al puerto de este. Es decir, si tenemos un odoo que está escuchando en 0.0.0.0:8069, hacemos que todo lo que venga a odoo.ichasco.com se redirija internamente a 127.0.0.1:8069.

Hacer eso, es muy sencillo lo único que hay que hacer es, crear un site para el servicio que queramos redirigir. En este caso para mas seguridad, se va a forzar que todas las peticiones se redirijan al puerto 443.

vim /etc/apache2/sites-available/<servicio>.conf
<VirtualHost *:80>
        ServerName <servicio>.ichasco.com

            RewriteEngine on
            RewriteCond %{HTTPS} !^on$ [NC]
            RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L]
            ErrorLog /var/log/apache2/<servicio>_error.log
            CustomLog /var/log/apache2/<servicio>_access.log combined env=!client-ip-request
</VirtualHost>

<VirtualHost *:443>
   ServerName <servicio>.ichasco.com

    SSLEngine on
    SSLCertificateFile </path/certificado>
    SSLCertificateKeyFile </path/key>
    SSLCertificateChainFile </path/chain>

    SSLProxyEngine on
    RequestHeader set "X-Forwarded-Proto" "https"
    SetEnv proxy-nokeepalive 1
        ProxyPass / http://127.0.0.1:<puerto en el que escucha>/
        ProxyPassReverse / http://127.0.0.1:<puerto en el que escucha>/
    ProxyErrorOverride off
    ErrorLog /var/log/apache2/<servicio>-ssl_error.log
    CustomLog /var/log/apache2/<servicio>-ssl_access.log combined env=!client-ip-request
</VirtualHost>

Luego hay que habilitar los modulos necesarios

a2enmod proxy
a2enmod headers
a2enmod rewrite
a2enmod ssl
a2enmod proxy_html
a2enmod proxy_http

Habilitar el site

a2ensite <servicio>.conf

Y reiniciar apache

service apache2 restart

Y ahora para acceder a un servicio que antes se accedía por ejemplo ip:puerto, valdría con https://servicio.ichasco.com

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *