Configuration du proxy inverse
Cette section décrit l'intégration de Sync-in avec un reverse proxy existant.
Avec l'installation Docker recommandée, le serveur est déjà configuré avec le reverse proxy Nginx.
Cette documentation ne s'applique donc pas à ce cas d'utilisation.
Configuration du serveur Sync-in
Dans le fichier de configuration environment.yaml, vous pouvez définir publicUrl de manière optionnelle avec l'URL exacte exposée par le
reverse proxy, en incluant le protocole et tout port non standard. Lorsqu'elle est configurée, Sync-in l'utilise pour générer les liens de
notification et les URL des éditeurs.
server:
# Optionnelle pour le moment ; obligatoire dans la prochaine version majeure
publicUrl: 'https://sync-in.domain.com'
trustProxy: true # valeur par défaut si non spécifiée
Lorsque publicUrl est configurée, cette URL doit être accessible depuis les navigateurs des utilisateurs et, pour les éditeurs bureautiques qui
communiquent avec Sync-in, depuis leurs services ou conteneurs. N'utilisez alors ni localhost ni 127.0.0.1.
publicUrl reste optionnelle jusqu'à la prochaine version majeure. Lorsqu'elle est absente, les notifications par e-mail ne contiennent pas de liens
d'action et les URL des éditeurs utilisent l'origine de la requête transmise par le proxy comme solution de repli pour assurer la compatibilité.
Pour des raisons de sécurité, publicUrl deviendra obligatoire dans la prochaine version majeure afin que les endpoints transmis aux éditeurs
soient construits à partir d'une origine de confiance contrôlée par l'administrateur plutôt qu'à partir des en-têtes de la requête.
L'option trustProxy indique au serveur dans quelle mesure il doit faire confiance aux proxys (ex. Nginx, Traefik) pour déterminer l'adresse IP
réelle du client.
La valeur par défaut true est conservée pour assurer la compatibilité des installations existantes.
Valeurs possibles
| Valeur | Comportement |
|---|---|
false | Ignore les en-têtes de proxy, prend uniquement l'IP de connexion |
true | Fait confiance aux en-têtes transmis par toute adresse |
IP, CIDR | Fait confiance uniquement aux proxys spécifiés |
| Nombre (obsolète) | >= 1 devient true ; < 1 devient false |
Depuis la version 2.6.0, les valeurs numériques ne sélectionnent plus le n-ième saut et seront supprimées dans la prochaine version majeure. Une configuration existante
trustProxy: 1 est traitée comme true. Ce défaut true est temporaire et devrait devenir false dans une future version majeure. D'ici là,
l'adresse IP du client peut être falsifiée si le backend est accessible directement ou si un proxy conserve les en-têtes fournis par le client,
comme le fait $proxy_add_x_forwarded_for. Restreignez l'accès direct à Sync-in et privilégiez l'IP ou le CIDR d'un proxy de confiance lorsque
c'est possible.
Configuration de Nginx
Plusieurs reverse proxies peuvent être utilisés. Dans cette documentation, la configuration sera décrite avec Nginx, qui reste la solution la plus répandue et la mieux prise en charge.
Ce fichier de configuration constitue la référence recommandée pour assurer le fonctionnement optimal des fonctionnalités du serveur Sync-in.
⚠️ Les directives server_name, ssl_certificate, ssl_certificate_key ainsi que l'adresse du serveur sync_in:8080 doivent être adaptées à votre
environnement.
La variable $http_host est utilisée volontairement : contrairement à $host, elle conserve un port non standard présent dans la requête du client
lors de la transmission des en-têtes d'hôte.
# SYNC-IN NGINX VHOST
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;
# General settings
charset UTF-8;
server_tokens off;
access_log off;
include mime.types;
# Optimized file sending
sendfile on;
tcp_nodelay on;
tcp_nopush on;
# Buffering for requests proxied to 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;
# Proxy buffering settings
proxy_buffering off; # nginx -> node
proxy_buffers 8 512k;
proxy_buffer_size 512k; # node highWaterMark
# Generous timeouts for long transfers or ws
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
keepalive_timeout 180 90s;
# Clients settings
proxy_request_buffering off; # client -> 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 always use the most accurate rule in its internal routing policies
proxy_pass http://sync_in_server;
gzip_static on;
gzip_comp_level 5;
expires 1d;
add_header Cache-Control public;
}
# NOTE: This is only needed when the Collabora Online Docker container is running locally
# and you are not using an external URL.
# Uncomment the line below to enable it:
# include collabora.conf;
# NOTE: This is only needed when the OnlyOffice Docker container is running locally
# and you are not using an external URL.
# Uncomment the line below to enable it:
# include onlyoffice.conf;
# NOTE: This is only needed when the Euro-Office Docker container is running locally
# and you are not using an external URL.
# Uncomment the line below to enable it:
# include eurooffice.conf;
# NOTE: This is only needed when the draw.io Docker container is running locally
# and you are not using an external URL.
# Uncomment the line below to enable it:
# include drawio.conf;
}
Configuration Collabora Online
Dans les deux modes, la fonctionnalité Collabora doit être activée dans le fichier de configuration environment.yaml :
applications:
files:
editors:
collabora:
enabled: true
⚠️ Si vous avez déployé Collabora via Docker et que vous utilisez Nginx en HTTPS, n'oubliez pas d'activer la terminaison SSL.
Mode proxifié
Dans la configuration Nginx, décommentez la directive include collabora.conf; pour charger la configuration dédiée à
Collabora. Dans ce mode, il n'est pas nécessaire d'exposer directement le serveur Collabora sur Internet, mais il doit rester accessible depuis le
serveur Sync-in.
Créez ensuite le fichier /etc/nginx/collabora.conf et insérez-y le contenu ci-dessous.
⚠️ La valeur de proxy_pass doit être ajustée en fonction de l'adresse du serveur Collabora.
# Static Files
location ^~ /browser/ {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# WOPI Discovery URL and Capabilities
location ^~ /hosting/ {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# Main WebSocket + Docs Management
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;
}
Mode externe
Le serveur Collabora doit être accessible depuis le serveur Sync-in et depuis le navigateur (nom de domaine ou adresse IP).
Configurer la directive externalServer dans environment.yaml :
applications:
files:
editors:
collabora:
enabled: true
externalServer: 'https://collabora.my-domain.com'
Configuration OnlyOffice
Dans les deux modes, la fonctionnalité OnlyOffice doit être activée dans le fichier de configuration environment.yaml :
applications:
files:
editors:
onlyoffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_ONLYOFFICE_SECRET'
Les paramètres avancés d'OnlyOffice sont détaillés dans la section Paramètres du Serveur
Générez une valeur sécurisée et utilisez le même secret sur le serveur OnlyOffice.
Mode proxifié
Dans la configuration Nginx, décommentez la directive include onlyoffice.conf; pour charger la configuration dédiée à
OnlyOffice. Dans ce mode, il n'est pas nécessaire d'exposer directement le serveur OnlyOffice sur Internet, mais il doit rester accessible depuis le
serveur Sync-in.
Créez ensuite le fichier /etc/nginx/onlyoffice.conf et insérez-y le contenu ci-dessous.
⚠️ La valeur de proxy_pass doit être ajustée en fonction de l'adresse du serveur 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;
}
Mode externe
Le serveur OnlyOffice doit être accessible depuis le serveur Sync-in et depuis le navigateur (nom de domaine ou adresse IP).
Configurer la directive externalServer dans environment.yaml :
applications:
files:
editors:
onlyoffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_ONLYOFFICE_SECRET'
externalServer: 'https://onlyoffice.my-domain.com'
Configuration Euro-Office
Euro-Office est géré par Sync-in comme un éditeur compatible OnlyOffice.
Dans les deux modes, la fonctionnalité Euro-Office doit être activée dans le fichier de configuration environment.yaml :
applications:
files:
editors:
eurooffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_EUROOFFICE_SECRET'
Générez une valeur sécurisée et utilisez le même secret sur le serveur Euro-Office.
N'activez pas onlyoffice et eurooffice en même temps, sauf si c'est intentionnel.
Si les deux sont activés, Sync-in donne la priorité à onlyoffice.
Mode proxifié
Dans la configuration Nginx, décommentez la directive include eurooffice.conf; pour charger la configuration dédiée à
Euro-Office. Dans ce mode, il n'est pas nécessaire d'exposer directement le serveur Euro-Office sur Internet, mais il doit rester accessible depuis le
serveur Sync-in.
Créez ensuite le fichier /etc/nginx/eurooffice.conf et insérez-y le contenu ci-dessous.
⚠️ La valeur de proxy_pass doit être ajustée en fonction de l'adresse du serveur 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;
}
Mode externe
Le serveur Euro-Office doit être accessible depuis le serveur Sync-in et depuis le navigateur (nom de domaine ou adresse IP).
Configurer la directive externalServer dans environment.yaml :
applications:
files:
editors:
eurooffice:
enabled: true
secret: 'REPLACE_WITH_LONG_RANDOM_EUROOFFICE_SECRET'
externalServer: 'https://eurooffice.my-domain.com'
Configuration de draw.io
Dans les deux modes, la fonctionnalité draw.io doit être activée dans le fichier de configuration environment.yaml :
applications:
files:
editors:
drawio:
enabled: true
Contrairement aux éditeurs bureautiques, draw.io ne nécessite ni secret partagé ni callback côté serveur.
Mode proxifié
Dans la configuration Nginx, décommentez la directive include drawio.conf; pour charger la configuration draw.io. Dans
ce mode, le conteneur draw.io reste privé sur le réseau Docker ou interne et est exposé sous /drawio/ sur l'origine de Sync-in.
Créez ensuite le fichier /etc/nginx/drawio.conf et insérez-y le contenu ci-dessous.
⚠️ Adaptez proxy_pass à l'adresse de votre serveur draw.io. L'en-tête CORS est requis, car Sync-in charge l'éditeur local dans une iframe isolée
dont l'origine est opaque.
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;
}
Mode externe
Le serveur draw.io doit être accessible depuis les navigateurs des utilisateurs. Configurez son URL avec la directive externalServer et utilisez
une origine dédiée afin d'isoler l'éditeur de Sync-in :
applications:
files:
editors:
drawio:
enabled: true
externalServer: 'https://drawio.my-domain.com'