> ## Documentation Index
> Fetch the complete documentation index at: https://help.teable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Nginx (proxy inverso)

> Configuración recomendada del proxy inverso Nginx para Teable: HTTPS (certificados), WebSocket, consejos para Docker y Nginx Proxy Manager.

Si quieres acceder a Teable mediante un nombre de dominio, activar HTTPS (terminación SSL) o mantener Teable en una red privada detrás de una única puerta de enlace, es habitual colocar Nginx delante de Teable.

<Callout type="info">
  Puntos clave:

  * `PUBLIC_ORIGIN` debe coincidir con la URL pública final que utilizan tus usuarios (por ejemplo, `https://teable.example.com`, sin una `/` al final)
  * Recomendamos encarecidamente utilizar **HTTPS y certificados** de forma predeterminada (no envíes tráfico de producción mediante HTTP sin cifrar)
  * Si dependes de funciones de WebSocket, el proxy inverso debe reenviar los encabezados `Upgrade/Connection`
</Callout>

<Tip>
  Teable se utiliza habitualmente en flujos de trabajo **colaborativos y en tiempo real**, por lo que mantener activada la compatibilidad con WebSocket suele ser la configuración más fiable. Incluso para un uso principalmente individual, conservar estos ajustes relacionados con WebSocket no afectará al acceso normal.
</Tip>

## Recomendado: HTTPS (predeterminado y producción)

Utiliza HTTPS de forma predeterminada: **sirve a los usuarios finales en el puerto 443** y conserva el puerto 80 únicamente para redirigir al 443 (o para los desafíos ACME HTTP-01).

A continuación se muestra un ejemplo para producción (HTTPS, WebSocket y redirección de HTTP a HTTPS). Sustituye el dominio y las rutas de los certificados:

```nginx theme={null}
upstream teable {
  server 127.0.0.1:3000;
  # Si Nginx se ejecuta en la misma red de Docker que Teable:
  # server teable:3000;
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

# El puerto 80 solo redirige (o se utiliza para desafíos ACME)
server {
  listen 80;
  server_name teable.example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  server_name teable.example.com;

  ssl_certificate     /etc/letsencrypt/live/teable.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/teable.example.com/privkey.pem;

  # Si tienes la certeza de que el dominio debe utilizar siempre HTTPS, puedes activar HSTS (hazlo con precaución)
  # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

  location / {
    proxy_pass http://teable;

    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 Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $host;

    proxy_http_version 1.1;
  }
}
```

### Certificados (emisión y renovación)

* **Let’s Encrypt (recomendado)**: utiliza Certbot o acme.sh para automatizar la emisión y la renovación
* **Herramientas con interfaz gráfica**: Nginx Proxy Manager puede solicitar y renovar automáticamente los certificados desde su interfaz

## Ejemplo 1: `location /` mínimo (inicio rápido)

> Nota: este ejemplo utiliza **solo HTTP** para redes internas o comprobaciones rápidas. En producción, utiliza preferentemente la configuración HTTPS anterior.

```nginx theme={null}
upstream teable {
  server 127.0.0.1:3000;
  # Si Nginx se ejecuta en la misma red de Docker que Teable:
  # server teable:3000;
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
  listen 80;
  server_name teable.example.com;

  location / {
    proxy_pass http://teable;

    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_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $host;

    proxy_http_version 1.1;
  }
}
```

## Consejos para Docker

* **Nginx en el host y Teable en contenedores**: normalmente se utiliza `proxy_pass http://127.0.0.1:3000;` (suponiendo que se publique `3000:3000`)
* **Nginx y Teable en la misma red de Docker**: puedes dirigir el tráfico mediante el nombre del servicio o contenedor, por ejemplo, `proxy_pass http://teable:3000;`

## Errores habituales

* **Evita reescribir rutas**: las reescrituras pueden impedir que el enrutamiento interno de Teable funcione, salvo que sepas exactamente qué estás haciendo.
* **Comprueba que `PUBLIC_ORIGIN` sea correcto**: afecta a las URL generadas, las redirecciones, los procesos de importación y carga, las devoluciones de llamada, etc.

## Nginx Proxy Manager (NPM)

Si no quieres escribir manualmente la configuración de Nginx, las herramientas con interfaz gráfica pueden ayudarte a administrar dominios, certificados y hosts de proxy:

* **Nginx Proxy Manager (NPM)**: habitual en configuraciones basadas en Docker

Una configuración típica de **Nginx Proxy Manager** es:

* **Crear un host de proxy**: establece `Nombres de dominio` en `teable.example.com`, `Esquema` en `http`, `Nombre de host o IP de reenvío` en `127.0.0.1` (o `teable` dentro de una red de Docker) y `Puerto de reenvío` en `3000`
* **Activar la compatibilidad con WebSocket**: activa WebSocket en las opciones del host de proxy (la etiqueta varía según la versión)
* **Proporcionar o asociar SSL**: solicita o selecciona un certificado de Let's Encrypt y, opcionalmente, fuerza la redirección a HTTPS
* **No olvides el entorno de Teable**: establece `PUBLIC_ORIGIN` en la URL pública final (por ejemplo, `https://teable.example.com`)
