ProHoster > Blog > administration > 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
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 :
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:
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.
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
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.
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.
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 :
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 :
Dans les mêmes paramètres d'hôte virtuel, ouvrez l'onglet Contexte et créez un nouveau contexte de type Proxy :
Spécifiez les paramètres : URI = /, Web server = nextcloud_1 (nom de l'étape précédente)
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)
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é :
Dans l'onglet SSL, indiquez le chemin d'accès à la clé et au certificat :
Le « listener » a été créé, maintenant dans la section Virtual Host Mappings, nous allons y ajouter notre hôte virtuel :
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.
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]
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é :
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 :
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 :
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 :
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.
Super, après ça on peut entrer dans l'interface d'autorisation :
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!