Nextcloud dentro y fuera de OpenLiteSpeed: configurar proxy inverso

¿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:


imagen


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:


  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í:


imagen


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


imagen


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.


imagen


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.


imagen


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:


imagen


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:


imagen


En la misma configuración del host virtual, abra la pestaña Contexto y cree un nuevo contexto del tipo Proxy:


imagen


Especifique los parámetros: URI = /, servidor web = nextcloud_1 (nombre del paso anterior)


imagen


Reinicie LSWS. Esto se hace con un clic desde la interfaz web, ¡milagros! (El portador del ratón hereditario habla en mí)


imagen


imagen


  • 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:


imagen


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


imagen


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


imagen


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.


imagen


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]

imagen


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:


imagen


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:


imagen


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:


imagen


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',
),

imagen


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:


imagen


¡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!

Source: https://habr.com/ru/post/452750/


All Articles