メインコンテンツにスキップ

リバースプロキシ

ユーザーは、リバースプロキシをカスタムでデプロイし、リクエストをImmichに転送することができます。これにより、リバースプロキシがTLS終端、ロードバランシング、またはその他の高度な機能を処理できます。Immichとユーザーの間のすべてのリバースプロキシは、すべてのヘッダーを転送し、HostX-Real-IPX-Forwarded-Proto、およびX-Forwarded-Forヘッダーを適切な値に設定する必要があります。さらに、リバースプロキシは大きなファイルのアップロードを許可する必要があります。これらの手法に従うことで、すべてのカスタムリバースプロキシがImmichと完全に互換性を持つようになります。

ノート

修復ページの読み込みには時間がかかる場合があります。サーバーのタイムアウトやエラーを回避するために、プロキシサーバーで少なくとも10分のタイムアウトを指定することをお勧めします。

注意

Immichはlocation /immich {のようなサブパスでの提供をサポートしていません。サブドメインまたはルートパスで提供する必要があります。

Nginxのサンプル設定

以下はnginxのサンプル設定です。public_urlをインスタンスの表向きのURLに設定し、backend_urlをImmichサーバーのパスに設定してください。

server {
server_name <public_url>;

# 大きなファイルのアップロードを許可
client_max_body_size 50000M;

# ヘッダー設定
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;

# WebSocketを有効化: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;

# タイムアウト設定
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;

location / {
proxy_pass http://<backend_url>:2283;
}
}

Let's Encryptとの互換性

nginxの設定にLet's Encrypt用のセクションが含まれている場合、以下のようなセグメントが含まれている可能性があります:

location ~ /.well-known {
...
}

この特定のlocationディレクティブは、モバイルクライアントが/.well-known/immichパスに到達するのを意図せず妨げる可能性があります。これは、発見に重要なパスです。この場合によくあるエラーメッセージは「アプリのメジャーバージョンがサーバーと互換性がありません」となります。この問題を解決するために、このパス専用の追加ロケーションブロックを導入し、リクエストが正しくImmichサーバーにプロキシされるようにしてください:

location = /.well-known/immich {
proxy_pass http://<backend_url>:2283;
}

これにより、Let's Encryptの機能を維持しながら、モバイルクライアントが必要なImmichパスにアクセスできるようになります。

Caddyのサンプル設定

nginxの代わりに、Caddyをリバースプロキシとして使用することもできます(自動HTTPS構成機能付き)。以下はそのサンプル設定です。

immich.example.org {
reverse_proxy http://<snip>:2283
}

Apacheのサンプル設定

以下はApache2のサイト設定のサンプルです。

<VirtualHost *:80>
ServerName <snip>
ProxyRequests Off
# 秒単位でタイムアウト設定
ProxyPass / http://127.0.0.1:2283/ timeout=600 upgrade=websocket
ProxyPassReverse / http://127.0.0.1:2283/
ProxyPreserveHost On
</VirtualHost>

Traefik Proxyのサンプル設定

以下はTraefikバージョン3向けのサンプルです。

重要なのは、Immichが使用するエントリーポイントのrespondingTimeoutsを増加させることです。この例では、ポート443websecureエントリーポイントです。デフォルトでは60秒に設定されており、これが原因でビデオが1分後にアップロードを停止(エラーコード499)することがあります。この設定では10分後に失敗するようになり、ほとんどのケースではこれで十分です。必要に応じてさらに増加させてください。

traefik.yaml

[...]
entryPoints:
websecure:
address: :443
# このセクションを追加する必要があります
transport:
respondingTimeouts:
readTimeout: 600s
idleTimeout: 600s
writeTimeout: 600s

次に、Immichが含まれるdocker-compose.ymlファイルの設定です。以下の例のように、Traefik専用のラベルを追加してください。

docker-compose.yml

services:
immich-server:
[...]
labels:
traefik.enable: true
# このエントリーポイントにおける読み取りタイムアウトを増加させます
traefik.http.routers.immich.entrypoints: websecure
traefik.http.routers.immich.rule: Host(`immich.your-domain.com`)
traefik.http.services.immich.loadbalancer.server.port: 2283

TraefikがImmichが存在するネットワークと通信できるようにする必要があることを覚えておいてください。通常、Traefikネットワークをimmich-serverに追加することで実行されます。