¿Cómo configurar OpenLiteSpeed para invertir el proxy en Nextcloud, ubicado en la red interna?
Sorprendentemente, ¡una búsqueda en Habré de OpenLiteSpeed no produce nada! Me apresuro a corregir esta injusticia, porque LSWS es un servidor web digno. Lo amo por la velocidad y la moderna interfaz de administración web:

A pesar de que OpenLiteSpeed es más famoso como un "acelerador" de WordPress, en el artículo de hoy mostraré su aplicación bastante específica. Es decir, solicitudes de proxy inverso (proxy inverso). ¿Dices que es más común usar nginx para esto? Estoy de acuerdo ¡Pero realmente nos dolió amar LSWS!
Proxy está bien, pero ¿dónde? Un servicio igualmente maravilloso es Nextcloud. Utilizamos Nextcloud para crear "nubes privadas para compartir archivos". Para cada cliente, asignamos una VM separada con Nextcloud, y no queremos exponerlos "fuera". En cambio, enviamos solicitudes a través de un proxy inverso común. Esta solución le permite:
- eliminar el servidor en el que se almacenan los datos del cliente de Internet y
- guardar direcciones ip
El esquema se ve así:

Está claro que el esquema está simplificado, porque Organizar una 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 no clauda, especialmente porque hay materiales sobre este tema en Habré. Pero definitivamente mostraré la configuración, sin la cual Nextcloud no funcionará para el proxy.
Dado: 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.
Configuraremos OpenLiteSpeed en el host 2. Tiene dos interfaces, una externa (se ve en Internet) y una interna con una dirección IP en la red 172.16.22.0/24
El nombre DNS cloud.connect.link conduce a la dirección IP de la interfaz externa del host 2
Tarea: llegar desde Internet a través del enlace ' https://cloud.connect.link ' (SSL) a Nextcloud en la red interna.
- Instale OpenLiteSpeed en Ubuntu 18.04.2.
Añadir un repositorio:
wget -O - http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh | sudo bash
sudo apt-get update
establecer, ejecutar:
sudo apt-get install openlitespeed
sudo / usr / local / lsws / bin / lswsctrl start
- Minimiza el cortafuegos.
sudo ufw permitir ssh
sudo ufw predeterminado permitir saliente
sudo ufw predeterminado denegar entrante
sudo ufw permitir http
sudo ufw permite https
sudo ufw permite desde su host de administración a cualquier puerto 7080
sudo ufw enable
- Configure OpenLiteSpeed como proxy inverso.
Crear directorios para virtualhost.
cd / usr / local / lsws /
sudo mkdirc cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf, html, logs}
sudo chown lsadm: lsadm ./conf/
Configure el virtualhost desde la interfaz web LSWS.
Gestión de URL abierta http://cloud.connect.link:7080
Nombre de usuario / contraseña predeterminados: admin / 123456

Agregue un host virtual (Hosts virtuales> Agregar).
Al agregar, aparecerá un mensaje de error: no hay archivo de configuración. Esto es normal, se soluciona haciendo clic en Crear.

En la pestaña General, especifique Document Root (aunque no es necesario, la configuración no despegará sin él). El nombre de dominio, si no se especifica, se tomará del nombre de host virtual, al que le pusimos el nombre de nuestro dominio.

Ahora es el momento de recordar que no solo tenemos un servidor web, sino un proxy inverso. La siguiente configuración le dirá a LSWS qué proxy y dónde. En la configuración del host virtual, abra la pestaña Aplicación externa y agregue una nueva aplicación, como un servidor web:

Indique el nombre y la dirección. El nombre puede especificarse arbitrariamente, pero debe recordarse, lo que es útil en los próximos pasos. La dirección es donde Nextcloud vive en la red interna:

En la misma configuración del 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! (El portador del ratón hereditario habla en mí)


- Ponemos el certificado, configuramos https.
Omitiremos el procedimiento para obtener un certificado , aceptaremos que ya lo tenemos y mentiremos con la clave en el directorio /etc/letsencrypt/live/cloud.connect.link.
Cree un "oyente" (Oyentes> Agregar), llámelo "https". Lo señalamos al puerto 443 y observamos que será seguro:

En la pestaña SSL, especifique la ruta a la clave y al certificado:

Se ha creado un "oyente", ahora en la sección Asignaciones de host virtual le agregamos nuestro host virtual:

Si LSWS se conecta a un solo servicio, la configuración puede completarse. Pero planeamos usarlo para transferir solicitudes a diferentes "autoridades" dependiendo del 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 debe 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 accedan a https de forma predeterminada y no realicen reenvío SSL manualmente si es necesario).
Habilite Habilitar reescribir y escribir Reglas de reescritura:
RewriteCond% {SERVER_PORT} 80
RewriteRule ^ (. *) $ Https: //% {SERVER_NAME}% {REQUEST_URI } [R = 301, L]

Es imposible aplicar las reglas de reescritura con el reinicio agraciado habitual debido a un extraño malentendido. Por lo tanto, reiniciar LSWS no es elegante, sino grosero y eficiente:
sudo systemctl restart lsws.service
Para que el servidor escuche el puerto 80, cree otro oyente. Llamémoslo http, especifique el puerto 80 y que no será seguro:

Por analogía con la configuración de escucha https, conectemos nuestro host virtual.
Ahora LSWS escuchará el puerto 80 y enviará solicitudes desde él al 443, reescribiendo la url.
En conclusión, recomiendo reducir el nivel de registro de LSWS, que se establece como Debug de forma predeterminada. En este modo, los registros se multiplican a la velocidad del rayo. Para la mayoría de los casos, un 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, reiniciamos LSWS, siga el enlace https://cloud.connect.link y vea:

Para que Nextcloud nos permita ingresar, debe agregar el dominio cloud.connect.link a la lista de confiables. Ve a editar config.php. Instalé Nextcloud automáticamente al instalar Ubuntu y la configuración está aquí: / var / snap / nextcloud / current / nextcloud / config.
A la clave Trusted_domains, agregue el parámetro 'cloud.connect.link':
'Trusted_domains' =>
matriz (
0 => '172.16.22.110',
1 => 'cloud.connect.link',
),

Además, en la misma configuración debe especificar la dirección IP de nuestro proxy. Llamo la atención sobre el hecho de que se debe especificar la dirección que sea visible para el servidor de Nextcloud, es decir, Interfaz local IP LSWS. Sin este paso, la interfaz web de Nextcloud funciona, pero las aplicaciones no están autorizadas.
'Trusted_proxies' =>
matriz (
0 => '172.16.22.100',
),
Bueno, después de eso podemos ingresar a la interfaz de autorización:

¡El problema está resuelto! Ahora cada cliente puede usar de forma segura la "nube de archivos" en su url personal, el servidor con los archivos está separado de Internet, los futuros clientes obtendrán lo mismo y no sufrirá una sola dirección IP adicional.
Además, puede usar el proxy inverso para entregar contenido estático, pero en el caso de Nextcloud esto no dará un aumento notable en la velocidad. Entonces esto es opcional y opcional.
Me alegra compartir esta historia, espero que alguien sea útil. Si conoce métodos más elegantes y efectivos para resolver la tarea, ¡le agradeceré los comentarios!