Zum Hauptinhalt springen

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.

Notiz

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.

Vorsicht

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.