Configuración de proxy inverso
Esta sección describe cómo integrar Sync-in con un proxy inverso existente.
Con la instalación de Docker recomendada, el servidor ya está configurado con el proxy inverso Nginx.
Por lo tanto, esta documentación no se aplica a ese caso de uso.
Configuración del servidor Sync-in
En el archivo de configuración environment.yaml, opcionalmente puede definir publicUrl con la URL exacta expuesta por el proxy inverso, incluido el esquema y cualquier puerto no estándar. Cuando está configurado, Sync-in lo usa para generar enlaces de notificación y URL del editor.
server:
# Opcional por ahora; será obligatorio en la próxima versión principal
publicUrl: 'https://sync-in.domain.com'
trustProxy: true # valor predeterminado si no se especifica
Cuando se configura publicUrl, se debe poder acceder a la URL desde los navegadores de los usuarios y, para los editores de Office que se comunican con Sync-in, desde sus servicios o contenedores. No utilice localhost o 127.0.0.1 en ese caso.
publicUrl sigue siendo opcional hasta la próxima versión principal. Cuando se omite, los correos electrónicos de notificación no contienen enlaces de acción y las URL de los editores utilizan el origen de la solicitud reenviado por el proxy como solución de compatibilidad. Por motivos de seguridad, publicUrl será obligatorio en la próxima versión principal, de modo que los endpoints de los editores se generen a partir de un origen de confianza controlado por el administrador y no de los encabezados de las solicitudes.
La opción trustProxy indica al servidor hasta qué punto debe confiar en los servidores proxy (por ejemplo, Nginx o Traefik) para determinar la dirección IP real del cliente. El valor predeterminado true se mantiene por compatibilidad con las instalaciones existentes.
Valores posibles
| Valor | Comportamiento |
|---|---|
false | Ignora los encabezados del proxy, usa solo la IP de conexión directa |
true | Confía en los encabezados reenviados desde cualquier dirección de conexión |
IP, CIDR | Confía solo en los proxies especificados |
| Número (obsoleto) | >= 1 se convierte en true; < 1 se convierte en false |
Desde la versión 2.6.0, los valores numéricos ya no seleccionan el salto n-ésimo y se eliminarán en la próxima versión principal. Un trustProxy: 1 existente se trata como true. El valor predeterminado true es temporal y está previsto que se convierta en false en una versión principal futura. Hasta entonces, las IP de los clientes pueden falsificarse si se puede acceder directamente al backend o si un proxy conserva los encabezados de reenvío proporcionados por el cliente, como lo hace $proxy_add_x_forwarded_for. Restrinja el acceso directo a Sync-in y, cuando sea posible, especifique los proxies de confianza mediante IP o CIDR.
Configuración de Nginx
Se pueden utilizar varios proxies inversos. En esta documentación, la configuración se describe con Nginx, ya que es la solución más común y mejor compatible.
Este archivo de configuración es la referencia recomendada para garantizar el funcionamiento óptimo de las funciones del servidor Sync-in.
⚠️ Las directivas server_name, ssl_certificate, ssl_certificate_key así como la dirección del servidor sync_in:8080 deben adaptarse a su entorno.
La variable $http_host es intencional: a diferencia de $host, conserva un puerto no estándar de la solicitud del cliente al reenviar los encabezados del host.
# HOST VIRTUAL DE NGINX PARA SYNC-IN
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream sync_in_server {
server sync_in:8080;
keepalive 32;
}
server {
listen 80;
# listen 443 ssl;
# http2 on;
# server_name domain.com www.domain.com;
# ssl_certificate /etc/ssl/certs/fullchain.pem;
# ssl_certificate_key /etc/ssl/certs/privkey.pem;
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_session_cache shared:SSL:10m;
# ssl_session_timeout 1h;
# ssl_prefer_server_ciphers on;
# ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
# ssl_ecdh_curve X25519:prime256v1;
# Configuración general
charset UTF-8;
server_tokens off;
access_log off;
include mime.types;
# Envío optimizado de archivos
sendfile on;
tcp_nodelay on;
tcp_nopush on;
# Búfer para las solicitudes reenviadas a Node
proxy_http_version 1.1;
chunked_transfer_encoding on;
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-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
# Configuración del búfer del proxy
proxy_buffering off; # Nginx -> Node
proxy_buffers 8 512k;
proxy_buffer_size 512k; # highWaterMark de Node
# Tiempos de espera amplios para transferencias largas o WebSocket
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
keepalive_timeout 180 90s;
# Configuración de clientes
proxy_request_buffering off; # cliente -> Nginx
large_client_header_buffers 4 16k;
client_max_body_size 0;
client_body_buffer_size 25M;
location / {
proxy_pass http://sync_in_server;
}
location ~* .(ico|jpg|png|gif|jpeg|swf|woff|svg)$ {
# Nginx utiliza siempre la regla más precisa en sus políticas de enrutamiento internas
proxy_pass http://sync_in_server;
gzip_static on;
gzip_comp_level 5;
expires 1d;
add_header Cache-Control public;
}
# NOTA: Esto solo es necesario cuando el contenedor Docker de Collabora Online se ejecuta localmente
# y no se utiliza una URL externa.
# Descomente la línea siguiente para habilitarlo:
# include collabora.conf;
# NOTA: Esto solo es necesario cuando el contenedor Docker de OnlyOffice se ejecuta localmente
# y no se utiliza una URL externa.
# Descomente la línea siguiente para habilitarlo:
# include onlyoffice.conf;
# NOTA: Esto solo es necesario cuando el contenedor Docker de Euro-Office se ejecuta localmente
# y no se utiliza una URL externa.
# Descomente la línea siguiente para habilitarlo:
# include eurooffice.conf;
# NOTA: Esto solo es necesario cuando el contenedor Docker de draw.io se ejecuta localmente
# y no se utiliza una URL externa.
# Descomente la línea siguiente para habilitarlo:
# include drawio.conf;
}
Configuración de Collabora Online
En ambos modos, la función Collabora Online debe estar habilitada en el archivo de configuración environment.yaml:
applications:
files:
editors:
collabora:
enabled: true
⚠️ Si ha desplegado Collabora Online mediante Docker y ejecuta Nginx con HTTPS, asegúrese de habilitar la terminación SSL.
Modo proxy
En la configuración de Nginx, descomente la directiva include collabora.conf; para cargar la configuración de Collabora Online.
En este modo, no es necesario exponer el servidor Collabora Online directamente a Internet, pero debe seguir siendo accesible desde el servidor Sync-in.
Luego, cree el archivo /etc/nginx/collabora.conf e inserte el contenido a continuación.
⚠️ El valor de proxy_pass debe ajustarse a la dirección de su servidor Collabora Online.
# Archivos estáticos
location ^~ /browser/ {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# URL de detección WOPI y capacidades
location ^~ /hosting/ {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# WebSocket principal y gestión de documentos
location ^~ /cool/ {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Modo externo
El servidor Collabora Online debe ser accesible tanto desde el servidor Sync-in como desde el navegador (nombre de dominio o dirección IP).
Configure la directiva externalServer en environment.yaml:
applications:
files:
editors:
collabora:
enabled: true
externalServer: 'https://collabora.my-domain.com'
Configuración de OnlyOffice
En ambos modos, la función OnlyOffice debe estar habilitada en el archivo de configuración environment.yaml:
applications:
files:
editors:
onlyoffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_ONLYOFFICE_SECRET'
Los parámetros avanzados de OnlyOffice se detallan en la sección Parámetros del servidor.
Genere un valor seguro y utilice el mismo secreto en el servidor OnlyOffice.
Modo proxy
En la configuración de Nginx, descomente la directiva include onlyoffice.conf; para cargar la configuración de OnlyOffice.
En este modo, no es necesario exponer el servidor OnlyOffice directamente a Internet, pero aún así debe ser accesible desde el servidor Sync-in.
Luego, cree el archivo /etc/nginx/onlyoffice.conf e inserte el contenido a continuación.
⚠️ El valor de proxy_pass debe ajustarse según la dirección de su servidor OnlyOffice.
location ^~ /onlyoffice/ {
proxy_pass http://onlyoffice:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host/onlyoffice;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_no_cache 1;
proxy_cache_bypass 1;
}
Modo externo
Se debe poder acceder al servidor OnlyOffice tanto desde el servidor Sync-in como desde el navegador (nombre de dominio o dirección IP).
Configure la directiva externalServer en environment.yaml:
applications:
files:
editors:
onlyoffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_ONLYOFFICE_SECRET'
externalServer: 'https://onlyoffice.my-domain.com'
Configuración de Euro-Office
Sync-in gestiona Euro-Office como un editor compatible con OnlyOffice.
En ambos modos, la función Euro-Office debe estar habilitada en el archivo de configuración environment.yaml:
applications:
files:
editors:
eurooffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_EUROOFFICE_SECRET'
Genere un valor seguro y utilice el mismo secreto en el servidor de Euro-Office.
No habilite onlyoffice y eurooffice al mismo tiempo salvo que lo haga deliberadamente.
Si ambos están habilitados, Sync-in da prioridad a onlyoffice.
Modo proxy
En la configuración de Nginx, descomente la directiva include eurooffice.conf; para cargar la configuración de Euro-Office.
En este modo, no es necesario exponer el servidor de Euro-Office directamente a Internet, pero aún así debe ser accesible desde el servidor Sync-in.
Luego, cree el archivo /etc/nginx/eurooffice.conf e inserte el contenido a continuación.
⚠️ El valor de proxy_pass debe ajustarse según la dirección de su servidor Euro-Office.
location ^~ /onlyoffice/ {
proxy_pass http://eurooffice:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host/onlyoffice;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_no_cache 1;
proxy_cache_bypass 1;
}
location ^~ /sdkjs/ {
proxy_pass http://eurooffice:80/sdkjs/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host/onlyoffice;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
}
Modo externo
El servidor de Euro-Office debe ser accesible tanto desde el servidor Sync-in como desde el navegador (nombre de dominio o dirección IP).
Configure la directiva externalServer en environment.yaml:
applications:
files:
editors:
eurooffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_EUROOFFICE_SECRET'
externalServer: 'https://eurooffice.my-domain.com'
Configuración de draw.io
En ambos modos, la función draw.io debe estar habilitada en el archivo de configuración environment.yaml:
applications:
files:
editors:
drawio:
enabled: true
A diferencia de los editores de Office, draw.io no requiere un secreto compartido ni un callback del servidor.
Modo proxy
En la configuración de Nginx, descomente la directiva include drawio.conf; para cargar la configuración de draw.io. En este modo, el contenedor draw.io permanece privado en Docker o en la red interna y se expone bajo /drawio/ en el origen de Sync-in.
Luego, cree el archivo /etc/nginx/drawio.conf e inserte el contenido a continuación.
⚠️ Ajuste proxy_pass a la dirección de su servidor draw.io. El encabezado CORS es necesario porque Sync-in carga el editor local en un iframe aislado con un origen opaco.
location ^~ /drawio/ {
add_header Access-Control-Allow-Origin "*" always;
proxy_pass http://drawio:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Modo externo
El servidor draw.io debe ser accesible desde los navegadores de los usuarios. Configure su URL con la directiva externalServer y use un origen dedicado para aislar el editor de Sync-in:
applications:
files:
editors:
drawio:
enabled: true
externalServer: 'https://drawio.my-domain.com'