Reverse Proxy
Benutzer können einen individuell konfigurierten Reverse Proxy bereitstellen, der Anfragen an Immich weiterleitet. Auf diese Weise kann der Reverse Proxy die TLS-Terminierung, das Lastenausgleich oder andere erweiterte Funktionen übernehmen. Alle Reverse Proxies zwischen Immich und dem Benutzer müssen alle Header weiterleiten und die Header Host
, X-Real-IP
, X-Forwarded-Proto
und X-Forwarded-For
auf ihre entsprechenden Werte setzen. Darüber hinaus sollte Ihr Reverse Proxy große Uploads zulassen. Indem Sie diesen Praktiken folgen, stellen Sie sicher, dass alle benutzerdefinierten Reverse Proxies vollständig mit Immich kompatibel sind.
Die Reparaturseite kann lange Ladezeiten erfordern. Um Server-Timeouts oder Fehler zu vermeiden, empfehlen wir, eine Zeitüberschreitung von mindestens 10 Minuten auf Ihrem Proxy-Server festzulegen.
Immich unterstützt keine Bereitstellung über einen Unterpfad wie location /immich {
. Es muss im Root-Pfad einer (Sub-)Domain bereitgestellt werden.
Beispielkonfiguration für Nginx
Nachfolgend finden Sie eine Beispielkonfiguration für Nginx. Stellen Sie sicher, dass Sie public_url
auf die externe URL Ihrer Instanz und backend_url
auf den Pfad des Immich-Servers einstellen.
server {
server_name <public_url>;
# Große Datei-Uploads zulassen
client_max_body_size 50000M;
# Header setzen
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;
# Websockets aktivieren: 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;
# Timeout einstellen
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
location / {
proxy_pass http://<backend_url>:2283;
}
}
Kompatibilität mit Let's Encrypt
Falls Ihre Nginx-Konfiguration einen Abschnitt für Let's Encrypt enthält, haben Sie wahrscheinlich einen Abschnitt wie den folgenden:
location ~ /.well-known {
...
}
Diese spezifische location
-Direktive kann versehentlich verhindern, dass mobile Clients den Pfad /.well-known/immich
erreichen, der für die Erkennung entscheidend ist. Die übliche Fehlermeldung hierfür lautet: "Ihre App-Hauptversion ist nicht mit dem Server kompatibel". Um dies zu beheben, sollten Sie einen zusätzlichen location
-Block speziell für diesen Pfad einfügen, um sicherzustellen, dass Anfragen korrekt an den Immich-Server weitergeleitet werden:
location = /.well-known/immich {
proxy_pass http://<backend_url>:2283;
}
Auf diese Weise können Sie die Funktionalität von Let's Encrypt beibehalten, während mobile Clients ohne Blockierung auf den notwendigen Immich-Pfad zugreifen können.
Beispielkonfiguration für Caddy
Als Alternative zu Nginx können Sie auch Caddy als Reverse Proxy verwenden (mit automatischer HTTPS-Konfiguration). Nachfolgend finden Sie eine Beispielkonfiguration.
immich.example.org {
reverse_proxy http://<snip>:2283
}
Beispielkonfiguration für Apache
Nachfolgend eine Beispielkonfiguration für die Apache2-Webseitenkonfiguration.
<VirtualHost *:80>
ServerName <snip>
ProxyRequests Off
# Timeout in Sekunden festlegen
ProxyPass / http://127.0.0.1:2283/ timeout=600 upgrade=websocket
ProxyPassReverse / http://127.0.0.1:2283/
ProxyPreserveHost On
</VirtualHost>
Beispielkonfiguration für Traefik Proxy
Das folgende Beispiel gilt für Traefik Version 3.
Das Wichtigste ist, die respondingTimeouts
des für Immich verwendeten EntryPoints zu erhöhen. In diesem Beispiel des EntryPoints websecure
für Port 443
. Standardmäßig ist er auf 60s eingestellt, was dazu führt, dass Videos nach 1 Minute nicht mehr hochgeladen werden (Fehlercode 499). Mit dieser Konfiguration schlägt der Upload nach 10 Minuten fehl, was in den meisten Fällen ausreichend ist. Erhöhen Sie die Zeit bei Bedarf.
traefik.yaml
[...]
entryPoints:
websecure:
address: :443
# Dieser Abschnitt muss hinzugefügt werden
transport:
respondingTimeouts:
readTimeout: 600s
idleTimeout: 600s
writeTimeout: 600s
Der zweite Teil befindet sich in der Datei docker-compose.yml
, in der Immich enthalten ist. Fügen Sie Traefik-spezifische Labels wie im Beispiel hinzu.
docker-compose.yml
services:
immich-server:
[...]
labels:
traefik.enable: true
# Erhöhen Sie die readingTimeouts für den hier verwendeten EntryPoint
traefik.http.routers.immich.entrypoints: websecure
traefik.http.routers.immich.rule: Host(`immich.your-domain.com`)
traefik.http.services.immich.loadbalancer.server.port: 2283
Denken Sie daran, dass Traefik mit dem Netzwerk kommunizieren muss, in dem Immich sich befindet, was normalerweise durch das Hinzufügen des Traefik-Netzwerks zum immich-server
erreicht wird.