Proxy inverso y Rocket.Chat


En este post veremos las formas que hay para configurar un proxy inverso para desplegar el servidor Rocket.Chat.

Publicado en May 15, 2021 by ManuelLoraRoman

Proxy Connections Rocket.Chat Apache Nginx

3 min LECTURA

Existen varias formas de implementar un proxy inverso para Rocket.Chat. Veremos algunas, de las más interesantes, y después veremos como implementarlo en nuestro proyecto.

  • La primera forma que nos encontramos es configurar un proxy inverso con NGinx.

En primer lugar, debemos tener instalado el siguiente paquete:

sudo apt-get install nginx


Después, añadiremos nuestra clave privada dentro del directorio /etc/nginx/certificate.key. Configuramos también los permisos de dicho fichero:

chmod 400 /etc/nginx/certificate.key


Después añadimos a la misma ubicación, nuestro certificado. Editaremos el fichero /etc/nginx/sites-enabled/default o si estamos usando nginx desde Docker, /etc/nginx/conf.d/default.conf y nos aseguramos de usar nuestro hostname en lugar de hostname de ejemplo que viene a continuación:

# Upstreams
upstream backend {
    server 127.0.0.1:3000;
}

# HTTPS Server
server {
    listen 443;
    server_name your_hostname.com;

    # You can increase the limit if your need to.
    client_max_body_size 200M;

    error_log /var/log/nginx/rocketchat.access.log;

    ssl on;
    ssl_certificate /etc/nginx/certificate.crt;
    ssl_certificate_key /etc/nginx/certificate.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don’t use SSLv3 ref: POODLE

    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}


Por último, solo nos quedaría el reiniciar el servicio de NGinx.

  • Otro sistema para realizar Proxy inverso es Plesk Onyx con un Nginx.

Plesk Onyx dispone actualmente de una instalación con Docker y un generador de reglas Docker para proxy con Nginx dentro del mismo. Debemos deshabilitar dicha opción puesto que no permite añadir directorios personalizados.

Debemos a su vez, añadir manualmente las reglas en la zona de directorios adicionales de NGinx, quedando algo así:

#manual extension docker with socket upgrade begin
location ~ ^/.* {
    proxy_pass http://0.0.0.0:3000;
    proxy_set_header Host             $host;
    proxy_set_header X-Real-IP        $remote_addr;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-Proto http;
    proxy_set_header X-Nginx-Proxy true;
    proxy_http_version 1.1;

    proxy_redirect off;
}

#extension docker end


  • Por último, disponemos del Proxy inverso realizado con Apache

En primer lugar, debemos ejecutar los siguientes comandos como root:

apt-get update
apt-get install apache2
a2enmod proxy_http
a2enmod proxy
a2enmod ssl
a2enmod proxy_wstunnel
a2enmod rewrite


Esto instalará apache2 y activará el módulo del proxy entre otras cosas. Después de realizar estos comandos, vamos a realizar el mismo procedimiento seguido en el Proxy inverso con NGinx:

  • Añadimos la clave privada a la ubicación /etc/ssl/private/chat.domain.com.key

  • Cambiamos los permisos a la clave privada chmod 400 /etc/ssl/private/chat.domain.com.key

  • Añadimos el certificado a la siguiente ubicación: /etc/ssl/certs/chat.domain.com.crt

  • Añadimos el certificado de la entidad certificadora /etc/ssl/certs/intermediate.ca.pem

  • Y por último, modificamos el fichero /etc/apache2/sites-enabled/rocketchat.conf y nos aseguramos de usar nuestro actual hostname:

<VirtualHost *:443>
    ServerAdmin it@domain.com
    ServerName chat.domain.com

    LogLevel info
    ErrorLog /var/log/chat.domain.com_error.log
    TransferLog /var/log/chat.domain.com_access.log

    SSLEngine On
    SSLCertificateFile /etc/ssl/certs/chat.domain.com.crt
    SSLCertificateKeyFile /etc/ssl/private/chat.domain.com.key
    SSLCertificateChainFile /etc/ssl/certs/intermediate.ca.pem

    <Location />
        Require all granted
    </Location>

    RewriteEngine On
    RewriteCond %{HTTP:CONNECTION} Upgrade [NC]
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*)           ws://localhost:3000/$1 [P,L]
    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.*)           http://localhost:3000/$1 [P,L]

    ProxyPassReverse /          http://localhost:3000/
</VirtualHost>


Reiniciamos el servicio de apache y ya lo tendríamos funcionando.

< Cumplimiento de Rocket.Chat