Proxy inverse
Les utilisateurs peuvent déployer un proxy inverse personnalisé qui transfère les requêtes vers Immich. De cette manière, le proxy inverse peut gérer la terminaison TLS, l'équilibrage de charge ou d'autres fonctionnalités avancées. Tous les proxies inverses entre Immich et l'utilisateur doivent transmettre tous les en-têtes et définir les en-têtes Host
, X-Real-IP
, X-Forwarded-Proto
et X-Forwarded-For
avec leurs valeurs appropriées. De plus, votre proxy inverse devrait permettre des téléchargements suffisamment volumineux. En suivant ces pratiques, vous vous assurez que tous les proxies inverses personnalisés sont entièrement compatibles avec Immich.
La page de réparation peut prendre beaucoup de temps à se charger. Pour éviter les délais d'attente ou les erreurs sur le serveur, nous recommandons de spécifier un délai d'attente d'au moins 10 minutes sur votre serveur proxy.
Immich ne prend pas en charge d'être servi sur un sous-chemin tel que location /immich {
. Il doit être servi sur le chemin racine d'un (sous-)domaine.
Exemple de configuration Nginx
Voici un exemple de configuration pour Nginx. Assurez-vous de définir public_url
sur l'URL publique de votre instance, et backend_url
sur le chemin du serveur Immich.
server {
server_name <public_url>;
# Autoriser les téléchargements de gros fichiers
client_max_body_size 50000M;
# Définir les en-têtes
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;
# Activer les websockets : http://nginx.org/en/docs/http/websocket.html
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
# Définir les délais d'attente
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
location / {
proxy_pass http://<backend_url>:2283;
}
}
Compatibilité avec Let's Encrypt
Si votre configuration Nginx inclut une section pour Let's Encrypt, il est probable que vous ayez un segment similaire au suivant :
location ~ /.well-known {
...
}
Cette directive de location
spécifique peut involontairement empêcher les clients mobiles d'atteindre le chemin /.well-known/immich
, essentiel pour la découverte. Le message d'erreur habituel pour ce cas est : "Votre version majeure de l'application n'est pas compatible avec le serveur". Pour y remédier, vous devriez introduire un bloc supplémentaire pour ce chemin, afin de vous assurer que les requêtes sont correctement retransmises vers le serveur Immich :
location = /.well-known/immich {
proxy_pass http://<backend_url>:2283;
}
Ce faisant, vous maintiendrez la fonctionnalité de Let's Encrypt tout en permettant aux clients mobiles d'accéder au chemin Immich nécessaire, sans obstruction.
Exemple de configuration Caddy
En alternative à Nginx, vous pouvez également utiliser Caddy comme proxy inverse (avec configuration HTTPS automatique). Voici un exemple de configuration.
immich.example.org {
reverse_proxy http://<snip>:2283
}
Exemple de configuration Apache
Voici un exemple de configuration pour un site Apache2.
<VirtualHost *:80>
ServerName <snip>
ProxyRequests Off
# définir un délai d'attente en secondes
ProxyPass / http://127.0.0.1:2283/ timeout=600 upgrade=websocket
ProxyPassReverse / http://127.0.0.1:2283/
ProxyPreserveHost On
</VirtualHost>
Exemple de configuration Traefik Proxy
L'exemple ci-dessous est pour Traefik version 3.
Le plus important est d'augmenter le respondingTimeouts
de l'entrée utilisée par Immich. Dans cet exemple, l'entrée websecure
pour le port 443
. Par défaut, il est défini à 60s, ce qui entraîne l'arrêt des téléchargements de vidéos après 1 minute (Code d'erreur 499). Avec cette configuration, cela échouera après 10 minutes, ce qui est suffisant dans la plupart des cas. Augmentez-le si nécessaire.
traefik.yaml
[...]
entryPoints:
websecure:
address: :443
# cette section doit être ajoutée
transport:
respondingTimeouts:
readTimeout: 600s
idleTimeout: 600s
writeTimeout: 600s
La deuxième partie se trouve dans le fichier docker-compose.yml
où se trouve Immich. Ajoutez les labels spécifiques à Traefik comme dans l'exemple.
docker-compose.yml
services:
immich-server:
[...]
labels:
traefik.enable: true
# augmenter les délais d'attente pour l'entrée utilisée ici
traefik.http.routers.immich.entrypoints: websecure
traefik.http.routers.immich.rule: Host(`immich.votre-domaine.com`)
traefik.http.services.immich.loadbalancer.server.port: 2283
Gardez à l'esprit que Traefik doit communiquer avec le réseau où se trouve Immich, généralement en ajoutant le réseau Traefik au immich-server
.