> ## 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 (reverse proxy)

> Configurazione consigliata del reverse proxy Nginx per Teable: HTTPS (certificati), WebSocket, suggerimenti per Docker e Nginx Proxy Manager.

Se vuoi accedere a Teable tramite un nome di dominio, abilitare HTTPS (terminazione SSL) o mantenere Teable in una rete privata dietro un unico gateway, una configurazione comune consiste nel posizionare Nginx davanti a Teable.

<Callout type="info">
  Punti chiave:

  * `PUBLIC_ORIGIN` deve corrispondere all'URL pubblico finale utilizzato dagli utenti (ad esempio `https://teable.example.com`, senza `/` finale)
  * Consigliamo vivamente di considerare **HTTPS + certificati** come impostazione predefinita (non usare HTTP semplice per il traffico di produzione)
  * Se utilizzi funzionalità WebSocket, il reverse proxy deve inoltrare le intestazioni `Upgrade/Connection`
</Callout>

<Tip>
  Teable viene comunemente utilizzato in workflow **collaborativi e in tempo reale**, quindi mantenere abilitato il supporto WebSocket tende a essere la configurazione più affidabile. Anche per un utilizzo prevalentemente individuale, lasciare attive queste impostazioni relative a WebSocket non influisce sul normale accesso.
</Tip>

## Consigliato: HTTPS (predefinito/produzione)

Considera HTTPS come impostazione predefinita: **servi gli utenti finali sulla porta 443** e mantieni la porta 80 soltanto per il reindirizzamento alla 443 (o per le challenge ACME HTTP-01).

Di seguito trovi un esempio adatto alla produzione (HTTPS + WebSocket + reindirizzamento HTTP→HTTPS). Sostituisci il dominio e i percorsi dei certificati:

```nginx theme={null}
upstream teable {
  server 127.0.0.1:3000;
  # Se Nginx viene eseguito nella stessa rete Docker di Teable:
  # server teable:3000;
}

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

# La porta 80 esegue soltanto il reindirizzamento (o viene usata per le challenge 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;

  # Se hai la certezza che il dominio debba usare sempre HTTPS, puoi abilitare HSTS (con cautela)
  # 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;
  }
}
```

### Certificati (emissione/rinnovo)

* **Let's Encrypt (consigliato)**: utilizza Certbot o acme.sh per l'emissione e il rinnovo automatici
* **Strumenti con interfaccia grafica**: Nginx Proxy Manager può richiedere e rinnovare automaticamente i certificati dalla propria interfaccia

## Esempio 1: `location /` minimo (avvio rapido)

> Nota: questo esempio usa **solo HTTP** ed è destinato a reti interne o verifiche rapide. Per la produzione, scegli la configurazione HTTPS precedente.

```nginx theme={null}
upstream teable {
  server 127.0.0.1:3000;
  # Se Nginx viene eseguito nella stessa rete Docker di 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;
  }
}
```

## Suggerimenti per Docker

* **Nginx sull'host, Teable nei container**: in genere usa `proxy_pass http://127.0.0.1:3000;` (supponendo che sia pubblicata la porta `3000:3000`)
* **Nginx e Teable nella stessa rete Docker**: puoi eseguire l'instradamento tramite il nome del servizio o del container, ad esempio `proxy_pass http://teable:3000;`

## Errori comuni

* **Evita di riscrivere i percorsi**: le riscritture possono interrompere l'instradamento interno di Teable, a meno che tu non sappia esattamente cosa stai facendo.
* **Assicurati che `PUBLIC_ORIGIN` sia corretto**: influisce su URL generati, reindirizzamenti, flussi di importazione e caricamento, callback e altro ancora.

## Nginx Proxy Manager (NPM)

Se non vuoi scrivere manualmente la configurazione di Nginx, gli strumenti con interfaccia grafica possono aiutarti a gestire domini, certificati e host proxy:

* **Nginx Proxy Manager (NPM)**: comune nelle configurazioni basate su Docker

Per **Nginx Proxy Manager**, una configurazione tipica è la seguente:

* **Crea un host proxy**: imposta `Nomi di dominio` su `teable.example.com`, `Schema` su `http`, `Hostname/IP di inoltro` su `127.0.0.1` (oppure `teable` all'interno di una rete Docker) e `Porta di inoltro` su `3000`
* **Abilita il supporto WebSocket**: attiva il supporto WebSocket nelle opzioni dell'host proxy (l'etichetta varia in base alla versione)
* **Esegui il provisioning o associa SSL**: richiedi o seleziona un certificato Let's Encrypt e, facoltativamente, forza il reindirizzamento HTTPS
* **Non dimenticare l'ambiente Teable**: imposta `PUBLIC_ORIGIN` sull'URL pubblico finale (ad esempio `https://teable.example.com`)
