Proxy inverso¶
Resumen¶
Esta página explica, para quienes administran el servidor, cómo ejecutar APS Conecta Gestión detrás de un proxy inverso: definir los proxies de confianza, sustituir la detección automática con los parámetros overwrite, configurar las redirecciones de descubrimiento de servicios en varios proxies y ajustar config.php en dos escenarios de ejemplo.
Fuente: documentación de Nextcloud, «admin_manual/configuration_server/reverse_proxy_configuration», versión 3ad9158, licencia CC BY 3.0; traducida y adaptada para APS Conecta Gestión.
APS Conecta Gestión puede ejecutarse detrás de un proxy inverso, que puede almacenar en caché recursos estáticos como imágenes o archivos CSS o JS, trasladar a otro servidor la carga de gestionar HTTPS o repartir la carga entre varios servidores.
Definir los proxies de confianza¶
Por seguridad, hay que definir explícitamente los servidores proxy en los que APS Conecta Gestión debe confiar. Las conexiones de los proxies de confianza reciben un tratamiento especial para obtener la información real del cliente, que se usa en el control de acceso y en el registro. Los parámetros se configuran en config/config.php
Establecer el parámetro trusted_proxies como una matriz de:
direcciones IPv4
rangos IPv4 en notación CIDR
direcciones IPv6
rangos IPv6 en notación CIDR
para definir los servidores en los que APS Conecta Gestión debe confiar como proxies. Este parámetro protege contra la suplantación de clientes, y esos servidores deben protegerse igual que el servidor APS Conecta Gestión.
Un proxy inverso puede definir cabeceras HTTP con la dirección IP original del cliente, y APS Conecta Gestión puede usar esas cabeceras para obtener esa dirección IP. De forma predeterminada, APS Conecta Gestión usa la cabecera estándar de facto 'X-Forwarded-For', pero esto puede configurarse con el parámetro forwarded_for_headers. Este parámetro es una matriz de cadenas de búsqueda de PHP; por ejemplo, 'X-Forwarded-For' pasa a ser 'HTTP_X_FORWARDED_FOR'. ¡Establecer mal este parámetro puede permitir que los clientes falsifiquen la dirección IP que ve APS Conecta Gestión, incluso cuando pasan por el proxy de confianza! El valor correcto de este parámetro depende del software de proxy.
Parámetros overwrite¶
La detección automática del nombre de host, el protocolo o la raíz web de APS Conecta Gestión puede fallar en ciertas situaciones con proxy inverso. Esta configuración permite sustituir manualmente la detección automática. Si APS Conecta Gestión no consigue detectar automáticamente el nombre de host, el protocolo o la raíz web, pueden usarse los parámetros overwrite en config/config.php.
overwritehostestablece el nombre de host del proxy. También puede indicarse un puerto.overwriteprotocolestablece el protocolo del proxy. Puede elegirse entre las dos opciones http y https.overwritewebrootestablece la ruta web absoluta del proxy a la carpeta de APS Conecta Gestión.overwritecondaddrsustituye los valores en función de la dirección remota. El valor debe ser una expresión regular de las direcciones IP del proxy. Esto es útil cuando se usa un proxy SSL inverso solo para el acceso https y se quiere usar la detección automática para el acceso http.overwrite.cli.urles la URL base de las URL que se generan dentro de APS Conecta Gestión con cualquier tipo de herramienta de línea de comandos. Por ejemplo, el área de notificaciones usará el valor establecido aquí.
Dejar el valor vacío u omitir el parámetro para mantener la detección automática.
Descubrimiento de servicios¶
Las redirecciones de CalDAV o CardDAV no funcionan si APS Conecta Gestión se ejecuta detrás de un proxy inverso. La solución recomendada es que el proxy inverso haga las redirecciones.
Apache2¶
RewriteEngine On
RewriteRule ^/\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
RewriteRule ^/\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
Gracias a @ffried por el ejemplo de apache2.
Traefik 1¶
Con etiquetas de Docker:
traefik.frontend.redirect.permanent: 'true'
traefik.frontend.redirect.regex: 'https://(.*)/.well-known/(?:card|cal)dav'
traefik.frontend.redirect.replacement: 'https://$$1/remote.php/dav'
Con traefik.toml:
[frontends.frontend1.redirect]
regex = "https://(.*)/.well-known/(?:card|cal)dav"
replacement = "https://$1/remote.php/dav
permanent = true
Traefik 2¶
Con etiquetas de Docker:
- "traefik.http.routers.nextcloud.middlewares=nextcloud_redirectregex@docker"
- "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent=true"
- "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex=https://(.*)/.well-known/(?:card|cal)dav"
- "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement=https://$${1}/remote.php/dav"
Con un archivo TOML:
[http.middlewares]
[http.middlewares.nextcloud-redirectregex.redirectRegex]
permanent = true
regex = "https://(.*)/.well-known/(?:card|cal)dav"
replacement = "https://${1}/remote.php/dav"
HAProxy¶
acl url_discovery path /.well-known/caldav /.well-known/carddav
http-request redirect location /remote.php/dav/ code 301 if url_discovery
NGINX¶
Si se usa nginx como servidor web de APS Conecta Gestión detrás de otro proxy inverso nginx, poner esto solo en la configuración del proxy inverso.
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location ^~ /.well-known {
return 301 $scheme://$host/index.php$uri;
}
Con NGINX Proxy Manager, hay que añadir la entrada proxy_hide_header Upgrade; en «Advanced Settings» del host del proxy, en «Custom Nginx Configuration»; de lo contrario, los dispositivos móviles (iPad, iPhone, etc.) simplemente recibirán el mensaje de error «Connection Closed».
Caddy¶
subdomain.example.com {
redir /.well-known/carddav /remote.php/dav/ 301
redir /.well-known/caldav /remote.php/dav/ 301
reverse_proxy {$NEXTCLOUD_HOST:localhost}
}
Pomerium¶
- from: https://subdomain.example.com
path: /.well-known/carddav
redirect:
path_redirect: /remote.php/dav/
- from: https://subdomain.example.com
path: /.well-known/caldav
redirect:
path_redirect: /remote.php/dav/
Gracias a @JeffMatson por el ejemplo de Pomerium.
Ejemplos¶
APS Conecta Gestión detrás de un proxy inverso (subdirectorio)¶
Si APS Conecta Gestión se sirve en un subdirectorio, por ejemplo https://example.com/nextcloud, detrás de un proxy inverso con la dirección IP 10.0.0.1 que termina TLS, establecer los siguientes parámetros en config/config.php:
<?php
$CONFIG = array (
'trusted_proxies' => ['10.0.0.1'],
'overwriteprotocol' => 'https',
'overwritewebroot' => '/nextcloud',
'overwrite.cli.url' => 'https://example.com/nextcloud',
);
Nota
overwritehost no es necesario en la mayoría de las configuraciones: APS Conecta Gestión leerá el nombre de host de la cabecera Host que reenvía el proxy. Establecerlo solo si hay que forzar un nombre de host concreto con independencia de la solicitud entrante. Dejar cualquier parámetro sin establecer o vacío para mantener la detección automática.
APS Conecta Gestión accesible mediante varios dominios / sustitución condicional¶
Si APS Conecta Gestión es accesible tanto directamente (HTTP) como a través de un proxy inverso (HTTPS), o a través de varios proxies que sirven distintos dominios públicos, usar overwritecondaddr para aplicar los parámetros overwrite solo cuando las solicitudes llegan desde la dirección IP de un proxy concreto. Las solicitudes que no proceden de ese proxy usarán la detección automática.
En el ejemplo siguiente, los parámetros overwrite solo se aplican cuando las solicitudes llegan desde el proxy en 10.0.0.1, que sirve APS Conecta Gestión como https://public.example.com:
<?php
$CONFIG = array (
'trusted_proxies' => ['10.0.0.1'],
'overwritehost' => 'public.example.com',
'overwriteprotocol' => 'https',
'overwritecondaddr' => '^10\.0\.0\.1$',
'overwrite.cli.url' => 'https://public.example.com',
);
Nota
overwritecondaddr recibe una expresión regular que coincide con la dirección remota del proxy. Cuando está establecido, los parámetros overwrite solo se aplican si la dirección remota coincide. Esto es útil cuando la misma instancia de APS Conecta Gestión es accesible tanto con proxy inverso como sin él, o cuando distintos proxies sirven la instancia con distintos nombres de host.