Перейти к основному содержимому

Обратный прокси-сервер

Пользователи могут развернуть собственный обратный прокси-сервер, который перенаправляет запросы к Immich. Таким образом, обратный прокси-сервер может обрабатывать завершение TLS, балансировку нагрузки или другие расширенные функции. Все обратные прокси-серверы между Immich и пользователем должны перенаправлять все заголовки и устанавливать заголовки Host, X-Real-IP, X-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;

# включить вебсокеты: 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, что крайне важно для обнаружения. Обычное сообщение об ошибке в этом случае: "Major версия вашего приложения не совместима с сервером". Чтобы исправить это, следует добавить дополнительный блок location специально для этого пути, который будет правильно проксировать запросы на сервер 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.

Самое главное — увеличить параметр respondingTimeouts входной точки, используемой Immich. В этом примере входная точка websecure предназначена для порта 443. По умолчанию тайм-аут установлен на 60 секунд, что приводит к прекращению загрузки видео через минуту (код ошибки 499). С этой конфигурацией ошибка произойдет через 10 минут, что в большинстве случаев достаточно. Увеличьте значение, если необходимо.

traefik.yaml

[...]
entryPoints:
websecure:
address: :443
# этот раздел необходимо добавить
transport:
respondingTimeouts:
readTimeout: 600s
idleTimeout: 600s
writeTimeout: 600s

Вторая часть — в файле docker-compose.yml, где находится Immich. Добавьте специфические метки для Traefik, как показано в примере.

docker-compose.yml

services:
immich-server:
[...]
labels:
traefik.enable: true
# увеличить readingTimeouts для используемой здесь входной точки
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.