Proxy inverso
Los usuarios pueden implementar un proxy inverso personalizado que retransmita las solicitudes a Immich. De esta manera, el proxy inverso puede manejar la terminación TLS, el balanceo de carga u otras funciones avanzadas. Todos los proxies inversos entre Immich y el usuario deben retransmitir todos los encabezados y establecer los encabezados Host
, X-Real-IP
, X-Forwarded-Proto
y X-Forwarded-For
con sus valores correspondientes. Además, tu proxy inverso debe permitir cargas suficientemente grandes. Al seguir estas prácticas, aseguras que todos los proxies inversos personalizados sean totalmente compatibles con Immich.
La página de reparación puede tardar mucho en cargar. Para evitar tiempos de espera del servidor o errores, recomendamos especificar un tiempo de espera de al menos 10 minutos en tu servidor proxy.
Immich no admite ser servido en una subruta como location /immich {
. Debe ser servido en la ruta raíz de un (sub)dominio.
Configuración de ejemplo para Nginx
A continuación se muestra un ejemplo de configuración para Nginx. Asegúrate de establecer public_url
en la URL externa de tu instancia y backend_url
en la ruta del servidor Immich.
server {
server_name <public_url>;
# permitir cargas de archivos grandes
client_max_body_size 50000M;
# Configurar encabezados
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;
# establecer tiempo de espera
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
location / {
proxy_pass http://<backend_url>:2283;
}
}
Compatibilidad con Let's Encrypt
En caso de que tu configuración de Nginx incluya una sección para Let's Encrypt, es probable que tengas un segmento similar al siguiente:
location ~ /.well-known {
...
}
Esta directiva de location
en particular puede evitar accidentalmente que los clientes móviles accedan a la ruta /.well-known/immich
, que es crucial para el descubrimiento. El mensaje de error habitual en este caso es: "La versión principal de tu aplicación no es compatible con el servidor". Para solucionar esto, debes agregar un bloque de ubicación adicional específicamente para esta ruta, asegurándote de que las solicitudes se reenviarán correctamente al servidor Immich:
location = /.well-known/immich {
proxy_pass http://<backend_url>:2283;
}
Al hacerlo, mantendrás la funcionalidad de Let's Encrypt mientras permites que los clientes móviles accedan a la ruta necesaria de Immich sin obstrucciones.
Configuración de ejemplo para Caddy
Como alternativa a Nginx, también puedes usar Caddy como proxy inverso (con configuración automática de HTTPS). A continuación, se muestra un ejemplo de configuración.
immich.example.org {
reverse_proxy http://<snip>:2283
}
Configuración de ejemplo para Apache
A continuación se muestra un ejemplo de configuración para un sitio Apache2.
<VirtualHost *:80>
ServerName <snip>
ProxyRequests Off
# establecer tiempo de espera en segundos
ProxyPass / http://127.0.0.1:2283/ timeout=600 upgrade=websocket
ProxyPassReverse / http://127.0.0.1:2283/
ProxyPreserveHost On
</VirtualHost>
Configuración de ejemplo para Traefik Proxy
El siguiente ejemplo es para Traefik versión 3.
Lo más importante es aumentar los respondingTimeouts
del punto de entrada utilizado por Immich. En este ejemplo del punto de entrada websecure
para el puerto 443
. Por defecto, está configurado en 60s, lo que provoca que los videos dejen de subir después de 1 minuto (Código de Error 499). Con esta configuración, fallará después de 10 minutos, lo cual es suficiente en la mayoría de los casos. Aumenta este valor si es necesario.
traefik.yaml
[...]
entryPoints:
websecure:
address: :443
# esta sección debe agregarse
transport:
respondingTimeouts:
readTimeout: 600s
idleTimeout: 600s
writeTimeout: 600s
La segunda parte está en el archivo docker-compose.yml
donde está Immich. Agrega las etiquetas específicas de Traefik como en el ejemplo.
docker-compose.yml
services:
immich-server:
[...]
labels:
traefik.enable: true
# aumentar los readingTimeouts para el punto de entrada usado aquí
traefik.http.routers.immich.entrypoints: websecure
traefik.http.routers.immich.rule: Host(`immich.tu-dominio.com`)
traefik.http.services.immich.loadbalancer.server.port: 2283
Ten en cuenta que Traefik necesita comunicarse con la red donde está Immich, generalmente hecho
agregando la red Traefik al immich-server
.