Skip to content

Reverse proxy y TLS

Angel Manso edited this page May 14, 2026 · 1 revision

Reverse proxy y TLS

El servidor escucha en HTTP plano en el puerto 5080 de la máquina. Para uso interno en LAN puede valer. Para acceso externo (teletrabajo, varias delegaciones) no: el tráfico va sin cifrar y tu navegador te marcará el sitio como inseguro.

Lo recomendable es ponerle delante un reverse proxy (Apache o nginx) que:

  • Termine TLS con un certificado válido (Let's Encrypt, gratis).
  • Sirva el chat en un dominio bonito (chat.tuempresa.com).
  • Soporte WebSocket (SignalR del chat lo necesita; si no, cae a long-polling: funciona pero peor latencia).

La forma fácil: Plesk

Si tu VPS tiene Plesk, abre la extensión EnterpriseChat → tab Dominios, elige un subdominio existente o crea uno nuevo, y la extensión escribe el reverse proxy Apache por ti. Ver Instalación Plesk.

Si no tienes Plesk, sigue leyendo.

Opción A — Apache (siempre disponible)

Apache viene de fábrica en casi cualquier Plesk/cPanel/manual. Requisitos:

  • Apache 2.4+.
  • Módulos: proxy, proxy_http, proxy_wstunnel, rewrite, headers. Comprueba:
    for m in proxy proxy_http proxy_wstunnel rewrite headers; do
        a2query -m $m
    done
    Si falta alguno: sudo a2enmod proxy proxy_http proxy_wstunnel rewrite headers && sudo systemctl reload apache2.

Snippet

Pega esto en el bloque <VirtualHost *:443> del subdominio chat.tuempresa.com (/etc/apache2/sites-available/chat.tuempresa.com.conf o lo que use tu setup):

ProxyPreserveHost On
ProxyRequests Off

# WebSocket upgrade (SignalR) — debe ir ANTES del ProxyPass general.
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:5080/$1 [P,L]

ProxyPass        / http://127.0.0.1:5080/ retry=0 timeout=3600 connectiontimeout=5
ProxyPassReverse / http://127.0.0.1:5080/

RequestHeader set X-Forwarded-Proto "https" env=HTTPS

Recarga:

sudo apachectl -t && sudo systemctl reload apache2

Verifica:

curl -kI https://chat.tuempresa.com/healthz
# Debe devolver 200 OK con Server: Kestrel (o Apache, según versión).

Opción B — nginx

Si nginx está delante de Apache (típico en Plesk con nginx activado), pega esto como Additional nginx directives del subdominio:

location ~ "^/" {
    proxy_pass http://127.0.0.1:5080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    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 X-Forwarded-Proto $scheme;
    proxy_read_timeout 3600s;
    proxy_send_timeout 3600s;
    proxy_buffering off;
}

Importante: location ~ "^/" (regex) en lugar de location / (prefix) evita el error nginx: [emerg] duplicate location "/" cuando Plesk ya tiene un location / propio en la plantilla del vhost.

Verifica:

sudo nginx -t && sudo systemctl reload nginx
curl -kI https://chat.tuempresa.com/healthz

Conseguir el certificado TLS

Si gestionas con Plesk: tu subdominio ya tiene el botón "Let's Encrypt" en el panel. Click y listo.

Si gestionas a mano:

sudo apt-get install -y certbot python3-certbot-apache   # o -nginx
sudo certbot --apache -d chat.tuempresa.com               # o --nginx

Renovación automática:

sudo systemctl status certbot.timer

Bloqueo extra: solo HTTPS

Para que http://chat.tuempresa.com redirija a https://:

Apache

<VirtualHost *:80>
    ServerName chat.tuempresa.com
    Redirect permanent / https://chat.tuempresa.com/
</VirtualHost>

nginx

server {
    listen 80;
    server_name chat.tuempresa.com;
    return 301 https://$server_name$request_uri;
}

Plesk te activa esto con un checkbox en Apache & nginx Settings → Permanent SEO-safe 301 redirect.

Cliente conectado por dominio

En el cliente WPF, URL del servidor = https://chat.tuempresa.com (sin :5080, sin http://). El cliente detecta automáticamente que es HTTPS y usa wss:// para el WebSocket.

Diagnóstico

Síntoma Causa típica
502 Bad Gateway El servicio no está corriendo. systemctl status enterprisechat.
Página Plesk en vez del chat Reverse proxy no aplicado o nginx/Apache no recargados.
Chat carga pero "Reconectando…" sin parar Falta soporte WebSocket. Revisa que proxy_wstunnel (Apache) o proxy_set_header Upgrade $http_upgrade (nginx) están aplicados.
Certificado inválido Let's Encrypt expiró o no llegaste a emitirlo.

Más en Solución de problemas.

Clone this wiki locally