Ir para o conteúdo principal

Proxy Reverso

Os usuários podem implantar um proxy reverso personalizado que encaminha solicitações para o Immich. Dessa forma, o proxy reverso pode lidar com a terminação TLS, balanceamento de carga ou outros recursos avançados. Todos os proxies reversos entre o Immich e o usuário devem encaminhar todos os cabeçalhos e definir os cabeçalhos Host, X-Real-IP, X-Forwarded-Proto e X-Forwarded-For para seus valores apropriados. Além disso, seu proxy reverso deve permitir uploads grandes o suficiente. Seguindo essas práticas, você garante que todos os proxies reversos personalizados sejam totalmente compatíveis com o Immich.

nota

A página de reparo pode levar muito tempo para carregar. Para evitar timeouts do servidor ou erros, recomendamos especificar um tempo limite de pelo menos 10 minutos no seu servidor proxy.

cuidado

O Immich não suporta ser servido em um subcaminho como location /immich {. Ele deve ser servido no caminho raiz de um (sub)domínio.

Exemplo de configuração do Nginx

Abaixo está um exemplo de configuração para o Nginx. Certifique-se de configurar o public_url para a URL pública da sua instância e o backend_url para o caminho do servidor Immich.

server {
server_name <public_url>;

# permitir uploads de arquivos grandes
client_max_body_size 50000M;

# Definir cabeçalhos
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;

# habilitar 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;

# definir timeout
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;

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

Compatibilidade com o Let's Encrypt

No caso de sua configuração do Nginx incluir uma seção para o Let's Encrypt, é provável que você tenha um segmento semelhante ao seguinte:

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

Essa diretiva de location pode impedir acidentalmente que clientes móveis acessem o caminho /.well-known/immich, que é crucial para a descoberta. A mensagem de erro usual para esse caso é: "Sua versão principal do aplicativo não é compatível com o servidor". Para corrigir isso, você deve introduzir um bloco de localização adicional especificamente para esse caminho, garantindo que as solicitações sejam corretamente encaminhadas para o servidor Immich:

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

Fazendo isso, você manterá a funcionalidade do Let's Encrypt enquanto permite que os clientes móveis acessem o caminho necessário do Immich sem obstruções.

Exemplo de configuração do Caddy

Como alternativa ao Nginx, você também pode usar Caddy como um proxy reverso (com configuração automática de HTTPS). Abaixo está um exemplo de configuração.

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

Exemplo de configuração do Apache

Abaixo está um exemplo de configuração de site para o Apache2.

<VirtualHost *:80>
ServerName <snip>
ProxyRequests Off
# definir timeout em segundos
ProxyPass / http://127.0.0.1:2283/ timeout=600 upgrade=websocket
ProxyPassReverse / http://127.0.0.1:2283/
ProxyPreserveHost On
</VirtualHost>

Exemplo de configuração do Traefik Proxy

O exemplo abaixo é para a versão 3 do Traefik.

O mais importante é aumentar os respondingTimeouts do ponto de entrada usado pelo Immich. Neste exemplo, do ponto de entrada websecure para a porta 443. Por padrão, é definido para 60s, o que resulta na interrupção do upload de vídeos após 1 minuto (Código de erro 499). Com esta configuração, ele falhará após 10 minutos, o que na maioria dos casos será suficiente. Aumente se necessário.

traefik.yaml

[...]
entryPoints:
websecure:
address: :443
# esta seção precisa ser adicionada
transport:
respondingTimeouts:
readTimeout: 600s
idleTimeout: 600s
writeTimeout: 600s

A segunda parte está no arquivo docker-compose.yml onde o Immich está. Adicione os rótulos específicos do Traefik como no exemplo.

docker-compose.yml

services:
immich-server:
[...]
labels:
traefik.enable: true
# aumentar readingTimeouts para o ponto de entrada usado aqui
traefik.http.routers.immich.entrypoints: websecure
traefik.http.routers.immich.rule: Host(`immich.your-domain.com`)
traefik.http.services.immich.loadbalancer.server.port: 2283

Lembre-se de que o Traefik precisa se comunicar com a rede onde o Immich está, geralmente feito adicionando a rede do Traefik ao immich-server.