Nextcloud dentro y fuera de OpenLiteSpeed: configurar el proxy inverso
¿Cómo configuro OpenLiteSpeed para revertir el proxy a Nextcloud en la red interna?
¡Sorprendentemente, una búsqueda en Habré para OpenLiteSpeed no da nada! Me apresuro a corregir esta injusticia, porque LSWS es un servidor web decente. Me encanta por su velocidad y su elegante interfaz de administración web:
Aunque OpenLiteSpeed es más famoso como un "acelerador" de WordPress, en el artículo de hoy mostraré un uso bastante específico. A saber, proxy inverso de solicitudes (proxy inverso). ¿Dices que es más común usar nginx para esto? estaré de acuerdo ¡Pero duele tanto que nos enamoramos de LSWS!
Proxying está bien, pero ¿dónde? En un servicio no menos maravilloso: Nextcloud. Usamos Nextcloud para crear "nubes de intercambio de archivos" privadas. Para cada cliente, asignamos una máquina virtual separada con Nextcloud y no queremos exponerlos "afuera". En su lugar, procesamos las solicitudes a través de un proxy inverso común. Esta solución permite:
1) eliminar el servidor en el que se almacenan los datos del cliente de Internet y
2) guardar direcciones IP.
El esquema se ve así:
Es claro que el esquema se simplifica, porque la organización de la infraestructura de servicios web no es el tema del artículo de hoy.
También en este artículo, omitiré la instalación y la configuración básica de nextcloud, especialmente porque hay materiales sobre este tema en Habré. Pero definitivamente mostraré la configuración, sin la cual Nextcloud no funcionará detrás de un proxy.
mayo:
Nextcloud está instalado en el host 1 y configurado para funcionar a través de http (sin SSL), solo tiene una interfaz de red local y una dirección IP "gris" 172.16.22.110.
Configuremos OpenLiteSpeed en el host 2. Tiene dos interfaces, externa (mira a Internet) e interna con una dirección IP en la red 172.16.22.0/24
La dirección IP de la interfaz externa del Host 2 es el nombre DNS cloud.connect.link
Problema:
Obtenga de Internet a través del enlace 'https://cloud.connect.link' (SSL) a Nextcloud en la red interna.
Instalación de OpenLiteSpeed en Ubuntu 18.04.2.
sudo ufw permitir ssh
sudo ufw predeterminado permitir saliente
sudo ufw predeterminado denegar entrante
sudo ufw permitir http
sudo ufw permitir https
sudo ufw permitir desde su anfitrión de gestión a cualquier puerto 7080
sudo ufw enable
Configure OpenLiteSpeed como un proxy inverso.
Vamos a crear directorios bajo virtualhost.
CD /usr/local/lsws/
sudo mkdirc nube.conectar.enlace
cd nube.connect.link/
sudo mkdir {conf, html, registros}
sudo chown lsadm:lsadm ./conf/
Configuremos el host virtual desde la interfaz web de LSWS.
Gestión de URL abiertas http://cloud.connect.link:7080
Nombre de usuario/contraseña predeterminados: admin/123456
Agregue un host virtual (Host virtual > Agregar).
Al agregar, aparecerá un mensaje de error: falta el archivo de configuración. Esto es normal, se soluciona haciendo clic en Hacer clic para crear.
En la pestaña General, especifique la raíz del documento (aunque no es necesaria, la configuración no funcionará sin ella). El nombre de dominio, si no se especifica, se tomará del nombre de host virtual, al que llamamos nuestro nombre de dominio.
Ahora es el momento de recordar que no solo tenemos un servidor web, sino un proxy inverso. Las siguientes configuraciones le dirán a LSWS qué proxy y dónde. En la configuración de virtualhost, abra la pestaña Aplicación externa y agregue una nueva aplicación del tipo de servidor web:
Especifique el nombre y la dirección. Puede especificar un nombre arbitrario, pero debe recordarlo, será útil en los próximos pasos. La dirección es aquella donde vive Nextcloud en la red interna:
En la misma configuración de host virtual, abra la pestaña Contexto y cree un nuevo contexto del tipo Proxy:
Especifique los parámetros: URI = /, Servidor web = nextcloud_1 (nombre del paso anterior)
Reinicie LSWS. Esto se hace con un clic desde la interfaz web, ¡milagros! (habla en mí un portador de ratón hereditario)
Ponemos el certificado, configuramos https. El procedimiento para obtener un certificado. lo omitiremos, aceptaremos que ya lo tenemos y nos acostaremos con la clave en el directorio /etc/letsencrypt/live/cloud.connect.link.
Vamos a crear un "oyente" (Oyentes > Agregar), llamémoslo "https". Apúntelo al puerto 443 y tenga en cuenta que será Seguro:
En la pestaña SSL, especifique la ruta a la clave y el certificado:
Se ha creado el "escucha", ahora en la sección Asignaciones de host virtual le agregaremos nuestro host virtual:
Si LSWS solo usará un proxy para un servicio, la configuración se puede completar. Pero planeamos usarlo para enviar solicitudes a diferentes "instancias" según el nombre de dominio. Y todos los dominios tendrán sus propios certificados. Por lo tanto, debe ir a la configuración de virtualhost y nuevamente especificar su clave y certificado en la pestaña SSL. En el futuro, esto debería hacerse para cada nuevo host virtual.
Queda por configurar la reescritura de url para que las solicitudes http se dirijan a https. (Por cierto, ¿cuándo terminará esto? Es hora de que los navegadores y otro software vayan a https de forma predeterminada y reenvíen manualmente a no-SSL si es necesario).
Active Habilitar reescritura y escriba reglas de reescritura:
Debido a un extraño malentendido, es imposible aplicar las reglas de reescritura con el reinicio elegante habitual. Por lo tanto, reiniciaremos LSWS no con gracia, sino con rudeza y eficiencia:
sudo systemctl reiniciar lsws.servicio
Para hacer que el servidor escuche el puerto 80, creemos otro Listener. Llamémoslo http, especifique el puerto 80 y que no será seguro:
Por analogía con la configuración del oyente https, adjuntemos nuestro servidor virtual.
Ahora LSWS escuchará en el puerto 80 y enviará solicitudes al 443 desde él, reescribiendo la URL.
En conclusión, recomiendo reducir el nivel de registro de LSWS, que está configurado en Depurar de forma predeterminada. ¡En este modo, los registros se multiplican a la velocidad del rayo! Para la mayoría de los casos, el nivel de Advertencia es suficiente. Vaya a Configuración del servidor > Registro:
Esto completa la configuración de OpenLiteSpeed como proxy inverso. Una vez más, reinicie LSWS, siga el enlace https://cloud.connect.link y ver:
Para que Nextcloud nos permita ingresar, debemos agregar el dominio cloud.connect.link a la lista de confianza. Vamos a editar config.php. Instalé Nextcloud automáticamente al instalar Ubuntu y la configuración se encuentra aquí: /var/snap/nextcloud/current/nextcloud/config.
Agregue el parámetro 'cloud.connect.link' a la clave trust_domains:
Además, en la misma configuración, debe especificar la dirección IP de nuestro proxy. Llamo su atención sobre el hecho de que la dirección debe especificarse la que es visible para el servidor Nextcloud, es decir La IP de la interfaz LSWS local. Sin este paso, la interfaz web de Nextcloud funciona, pero las aplicaciones no están autorizadas.
Genial, después de eso podemos ingresar a la interfaz de autorización:
¡Problema resuelto! Ahora cada cliente puede usar de forma segura la "nube de archivos" en su propia URL personal, el servidor con archivos está separado de Internet, los futuros clientes recibirán todo igual y ni una sola dirección IP adicional se verá afectada.
Además, puede usar un proxy inverso para entregar contenido estático, pero en el caso de Nextcloud, esto no dará un aumento notable en la velocidad. Así que es opcional y opcional.
Me complace compartir esta historia, espero que sea útil para alguien. Si conoce métodos más elegantes y eficientes para resolver el problema, ¡le agradeceré los comentarios!