Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Comment configurer OpenLiteSpeed ​​​​pour inverser le proxy vers Nextcloud sur le réseau interne ?

Étonnamment, une recherche sur Habré pour OpenLiteSpeed ​​ne donne rien ! Je m'empresse de corriger cette injustice, car LSWS est un serveur web décent. Je l'aime pour sa rapidité et son interface d'administration Web sophistiquée :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Même si OpenLiteSpeed ​​​​est surtout connu comme un "accélérateur" WordPress, dans l'article d'aujourd'hui, je vais en montrer une utilisation assez spécifique. A savoir le reverse proxying des requêtes (reverse proxy). Vous dites qu'il est plus courant d'utiliser nginx pour cela ? Je suis d'accord. Mais ça fait tellement mal qu'on est tombé amoureux de LSWS !

Proxy, c'est bien, mais où ? Dans un service non moins merveilleux - Nextcloud. Nous utilisons Nextcloud pour créer des "clouds de partage de fichiers" privés. Pour chaque client, nous allouons une VM distincte avec Nextcloud, et nous ne voulons pas les exposer "à l'extérieur". Au lieu de cela, nous transmettons les demandes via un proxy inverse commun. Cette solution permet :
1) supprimer le serveur sur lequel les données client sont stockées d'Internet et
2) enregistrer les adresses IP.

Le diagramme ressemble à ceci:

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Il est clair que le schéma est simplifié, car l'organisation de l'infrastructure des services web n'est pas le sujet de l'article d'aujourd'hui.

Aussi dans cet article j'omettrai l'installation et la configuration de base du nextcloud, d'autant plus qu'il existe des matériaux sur ce sujet sur Habré. Mais je vais certainement montrer les paramètres, sans lesquels Nextcloud ne fonctionnera pas derrière un proxy.

donné:
Nextcloud est installé sur l'hôte 1 et configuré pour fonctionner sur http (sans SSL), n'a qu'une interface réseau locale et une adresse IP "grise" 172.16.22.110.
Configurons OpenLiteSpeed ​​​​sur l'hôte 2. Il a deux interfaces, externe (regarde vers Internet) et interne avec une adresse IP sur le réseau 172.16.22.0/24
L'adresse IP de l'interface externe de l'hôte 2 est le nom DNS cloud.connect.link

Tâche
Obtenez à partir d'Internet via le lien 'https://cloud.connect.link' (SSL) à Nextcloud sur le réseau interne.

  • Installation d'OpenLiteSpeed ​​sur Ubuntu 18.04.2.

Ajoutons un dépôt :

wget -O http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh |coup de sudo
sudo apt-get update

installez, lancez :

sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start

  • Configuration minimale du pare-feu.

    sudo ufw autorise ssh
    sudo ufw par défaut autoriser les sorties
    sudo ufw par défaut nier entrant
    sudo ufw autorise http
    sudo ufw autoriser https
    sudo ufw autoriser à partir de votre hébergeur de gestion vers n'importe quel port 7080
    sudo ufw activer

  • Configurez OpenLiteSpeed ​​​​en tant que proxy inverse.
    Créons des répertoires sous le virtualhost.

    cd /usr/local/lsws/
    sudo mkdirc cloud.connect.link
    cd cloud.connect.link/
    sudo mkdir {conf,html,journaux}
    sudo chown lsadm:lsadm ./conf/

Configurons l'hôte virtuel à partir de l'interface Web LSWS.
Gestion des URL ouvertes http://cloud.connect.link:7080
Identifiant/mot de passe par défaut : admin/123456

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Ajoutez un hôte virtuel (Hôtes virtuels > Ajouter).
Lors de l'ajout, un message d'erreur apparaîtra - le fichier de configuration est manquant. Ceci est normal, résolu en cliquant sur Cliquez pour créer.

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Dans l'onglet Général, spécifiez la racine du document (bien qu'elle ne soit pas nécessaire, la configuration ne décollera pas sans elle). Le nom de domaine, s'il n'est pas spécifié, sera tiré du nom d'hôte virtuel, que nous avons nommé notre nom de domaine.

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Il est maintenant temps de se rappeler que nous n'avons pas seulement un serveur Web, mais un proxy inverse. Les paramètres suivants indiqueront à LSWS quoi proxy et où. Dans les paramètres de l'hôte virtuel, ouvrez l'onglet Application externe et ajoutez une nouvelle application de type serveur Web :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Indiquez le nom et l'adresse. Vous pouvez spécifier un nom arbitraire, mais vous devez vous en souvenir, cela vous sera utile dans les prochaines étapes. L'adresse est celle où Nextcloud réside dans le réseau interne :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Dans les mêmes paramètres d'hôte virtuel, ouvrez l'onglet Contexte et créez un nouveau contexte de type Proxy :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Spécifiez les paramètres : URI = /, Web server = nextcloud_1 (nom de l'étape précédente)

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Redémarrez LSWS. Cela se fait en un clic depuis l'interface web, des miracles ! (un porteur de souris héréditaire parle en moi)

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse
Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

  • Nous mettons le certificat, configurons https.
    La procédure d'obtention d'un certificat nous allons l'omettre, convenir que nous l'avons déjà et mentir avec la clé dans le répertoire /etc/letsencrypt/live/cloud.connect.link.

Créons un "listener" (Listeners > Add), appelons le "https". Pointez-le sur le port 443 et notez qu'il sera sécurisé :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Dans l'onglet SSL, indiquez le chemin d'accès à la clé et au certificat :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Le « listener » a été créé, maintenant dans la section Virtual Host Mappings, nous allons y ajouter notre hôte virtuel :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Si LSWS ne proxy qu'à un seul service, la configuration peut être terminée. Mais nous prévoyons de l'utiliser pour envoyer des requêtes à différentes "instances" en fonction du nom de domaine. Et tous les domaines auront leurs propres certificats. Par conséquent, vous devez accéder à la configuration de l'hôte virtuel et spécifier à nouveau sa clé et son certificat dans l'onglet SSL. À l'avenir, cela devrait être fait pour chaque nouvel hôte virtuel.

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Il reste à configurer la réécriture d'url pour que les requêtes http soient adressées à https.
(Au fait, quand cela se terminera-t-il ? Il est temps que les navigateurs et autres logiciels passent en https par défaut, et transmettent manuellement en non-SSL si nécessaire).
Activez Activer la réécriture et écrivez les règles de réécriture :

RéécritureCond %{SERVER_PORT} 80
Règle de réécriture ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

En raison d'un malentendu étrange, il est impossible d'appliquer les règles de réécriture avec le redémarrage normal habituel. Par conséquent, nous allons redémarrer LSWS non pas gracieusement, mais grossièrement et efficacement :

sudo systemctl redémarrer lsws.service

Pour que le serveur écoute le port 80, créons un autre Listener. Appelons-le http, spécifions le 80e port et qu'il ne sera pas sécurisé :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Par analogie avec le paramètre d'écouteur https, attachons-y notre hôte virtuel.

Maintenant, LSWS écoutera sur le port 80 et enverra des requêtes à 443 à partir de celui-ci, en réécrivant l'URL.
En conclusion, je recommande d'abaisser le niveau de journalisation LSWS, qui est défini sur Debug par défaut. Dans ce mode, les bûches se multiplient à la vitesse de l'éclair ! Dans la plupart des cas, le niveau Avertissement est suffisant. Accédez à Configuration du serveur > Journal :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Ceci termine la configuration d'OpenLiteSpeed ​​​​en tant que proxy inverse. Encore une fois, redémarrez LSWS, suivez le lien https://cloud.connect.link et voir :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Pour que Nextcloud nous laisse entrer, nous devons ajouter le domaine cloud.connect.link à la liste de confiance. Allons éditer config.php. J'ai installé Nextcloud automatiquement lors de l'installation d'Ubuntu et la configuration se trouve ici : /var/snap/nextcloud/current/nextcloud/config.
Ajoutez le paramètre 'cloud.connect.link' à la clé trusted_domains :

'trusted_domains' =>
tableau (
0 => '172.16.22.110',
1 => 'cloud.connect.lien',
),

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

De plus, dans la même configuration, vous devez spécifier l'adresse IP de notre proxy. J'attire votre attention sur le fait que l'adresse doit être précisée celle qui est visible par le serveur Nextcloud, c'est-à-dire L'IP de l'interface LSWS locale. Sans cette étape, l'interface web Nextcloud fonctionne, mais les applications ne sont pas autorisées.

'trusted_proxies' =>
tableau (
0 => '172.16.22.100',
),

Super, après ça on peut entrer dans l'interface d'autorisation :

Nextcloud à l'intérieur et à l'extérieur d'OpenLiteSpeed : configuration du proxy inverse

Problème résolu! Désormais, chaque client peut utiliser en toute sécurité le «nuage de fichiers» sur sa propre URL personnelle, le serveur avec les fichiers est séparé d'Internet, les futurs clients recevront tout de la même manière et aucune adresse IP supplémentaire ne sera affectée.
De plus, vous pouvez utiliser un proxy inverse pour diffuser du contenu statique, mais dans le cas de Nextcloud, cela ne donnera pas une augmentation notable de la vitesse. C'est donc facultatif et facultatif.

Je suis heureux de partager cette histoire, j'espère qu'elle sera utile à quelqu'un. Si vous connaissez des méthodes plus élégantes et efficaces pour résoudre le problème, je serai reconnaissant pour les commentaires!

Source: habr.com

Ajouter un commentaire