Cum să configurăm OpenLiteSpeed pentru a face reverse proxy pentru Nextcloud, aflat într-o rețea internă?
Este surprinzător, dar căutarea pe Habr pentru OpenLiteSpeed nu oferă nimic! Mă grăbesc să corectez această nedreptate, deoarece LSWS este un server web demn. Îmi place pentru viteză și interfața de administrare modernă:

Deși OpenLiteSpeed este cel mai cunoscut ca „accelerator” pentru WordPress, în articolul de astăzi voi arăta o utilizare destul de specifică a acestuia. Anume reverse proxy pentru cereri. Vei spune că pentru asta este mai obișnuit să folosești nginx? Sunt de acord. Dar ne-a plăcut atât de mult LSWS!
Proxy este ok, dar unde? Către un serviciu la fel de remarcabil – Nextcloud. Folosim Nextcloud pentru a crea „clouduri” private de partajare a fișierelor. Pentru fiecare client, alocăm o VM separată cu Nextcloud și nu vrem să le expunem „exterior”. În schimb, proxy-uri cererile printr-un reverse proxy comun. Această soluție permite:
1) să eliminăm serverul pe care sunt stocate datele clientului din internet și
2) să economisim adrese IP.
Schema arată astfel:

Este clar că schema este simplificată, deoarece organizarea infrastructurii serviciilor web nu este subiectul acestui articol.
De asemenea, în acest articol voi omite instalarea și configurarea de bază a Nextcloud-ului, mai ales că pe Habr există materiale dedicate acestui subiect. Dar voi arăta neapărat setările fără de care Nextcloud nu va funcționa corect pe proxy.
Datele problemei:
Nextcloud este instalat pe hostul 1 și configurat să funcționeze pe http (fără SSL), având doar o interfață de rețea locală și o adresă IP „gri” 172.16.22.110.
Configurăm OpenLiteSpeed pe hostul 2. Acesta are două interfețe, una externă (care se uită în internet) și una internă cu adresă IP în rețeaua 172.16.22.0/24
Pe adresa IP a interfeței externe a hostului 2 duce numele DNS cloud.connect.link
Sarcina:
Să accesăm din internet linkul ‘‘ (SSL) către Nextcloud din rețeaua internă.
- Instalăm OpenLiteSpeed pe Ubuntu 18.04.2.
Adăugăm repository-ul:
wget -O — |sudo bash
sudo apt-get update
instalăm, pornim:
sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start
- Configurăm minim firewall-ul.
sudo ufw allow ssh
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow http
sudo ufw allow https
sudo ufw allow from hostul dvs. de management to any port 7080
sudo ufw enable - Configurăm OpenLiteSpeed ca reverse proxy.
Creăm directoare pentru virtual host.cd /usr/local/lsws/
sudo mkdir cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf,html,logs}
sudo chown lsadm:lsadm ./conf/
Configurăm virtual host din interfața web LSWS.
Deschidem URL-ul de management
Login/parol implicit: admin/123456

Adăugați virtualhost (Virtual Hosts > Add).
La adăugare va apărea un mesaj de eroare - lipsa fișierului de configurare. Este normal, se rezolvă apăsând Click to create.

În tab-ul General vom specifica Document Root (deși nu va fi necesar, fără el configurația nu va funcționa). Numele domeniului, dacă nu este specificat, va fi preluat din numele virtual host-ului, pe care l-am numit după numele domeniului nostru.

Acum este timpul să ne amintim că avem un server web, dar și un reverse proxy. Următoarele setări îi vor indica lui LSWS ce să proxyeze și unde. În setările virtualhost-ului deschidem tab-ul External App și adăugăm o nouă aplicație de tip Web server:

Specificați numele și adresa. Numele poate fi ales liber, dar trebuie să-l rețineți, va fi util în pașii următori. Adresa este locul unde se află Nextcloud în rețeaua internă:

În aceleași setări ale virtualhost-ului deschidem tab-ul Context și creăm un nou context de tip Proxy:

Specificați parametrii: URI = /, Web server = nextcloud_1 (numele din pasul anterior)

Repornim LSWS. Acest lucru se face cu un singur clic din interfața web, minuni! (în mine vorbește un moștenitor de mouse)


- Instalăm certificatul și configurăm https.
o vom omite, vom conveni că acesta există deja și se află împreună cu cheia în directorul /etc/letsencrypt/live/cloud.connect.link.
Vom crea un „listener” (Listeners > Add), îl vom numi „https”. Vom specifica portul 443 și vom menționa că va fi Secure:

În tab-ul SSL vom specifica calea către cheie și certificat:

„Listener” a fost creat, acum în secțiunea Virtual Host Mappings vom adăuga virtualhost-ul nostru:

Dacă LSWS va proxyeza doar către un singur serviciu, setările pot fi finalizate. Dar ne planificăm să-l folosim pentru a redirecționa cererile către diferite „instanțe” în funcție de numele domeniului. Și toate domeniile vor avea propriile certificate. Așadar, trebuie să mergem în configurația virtualhost-ului și să specificăm din nou în tab-ul SSL cheia și certificatul său. Acest lucru trebuie făcut pentru fiecare nou virtualhost.

Rămâne de configurat redirecționarea URL-ului, astfel încât cererile http să fie direcționate către https.
(Apropo, când se va termina asta? Este timpul ca browserele și alte software-uri să meargă în mod implicit pe https, iar redirecționarea pe no-SSL să se facă manual, dacă este necesar).
Activăm Enable Rewrite și scriem Rewrite Rules:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ } [R=301,L]

Aplicați regulile de Rewrite convenabil, dar dintr-o neînțelegere, repornirea Graceful nu este posibilă. De aceea, vom reporni LSWS nu elegant, ci brutal și eficient:
sudo systemctl restart lsws.service
Pentru ca serverul să asculte și pe portul 80, vom crea încă un Listener. Îl vom numi http, vom specifica portul 80 și că va fi non-Secure:

Similar cu configurarea listener-ului https, vom atașa virtualhost-ul nostru.
Acum LSWS va asculta pe portul 80 și va direcționa cererile de pe acesta pe 443, rescriind url-ul.
În concluzie, vă recomand să reduceți nivelul de logare LSWS, care în mod implicit este setat ca Debug. În acest mod, logurile se multiplică instantaneu! Pentru majoritatea cazurilor, nivelul Warning este suficient. Mergem la Server Configuration > Log:

Cu aceasta, configurarea OpenLiteSpeed ca proxy invers s-a încheiat. O repornim din nou pe LSWS, mergem la link-ul și vedem:

Pentru ca Nextcloud să ne permită accesul, trebuie să adăugăm domeniul cloud.connect.link în lista de domenii de încredere. Mergem să edităm config.php. Nextcloud a fost instalat automat la instalarea Ubuntu și configurația se află aici: /var/snap/nextcloud/current/nextcloud/config.
La cheia trusted_domains adăugăm parametrul ‘cloud.connect.link’:
‘trusted_domains’ =>
array (
0 => ‘172.16.22.110’,
1 => ‘cloud.connect.link’,
),

Apoi, în aceeași configurație, trebuie să specificăm adresa IP a proxy-ului nostru. Atenție, adresa trebuie să fie cea vizibilă serverului Nextcloud, adică IP-ul interfeței locale LSWS. Fără acest pas, funcționează interfața web Nextcloud, dar aplicațiile nu se autentifică.
‘trusted_proxies’ =>
array (
0 => ‘172.16.22.100’,
),
Excelent, după aceasta putem accesa interfața de autentificare:

Problema este rezolvată! Acum fiecare client poate utiliza în siguranță „cloud-ul de fișiere” prin URL-ul său personal, serverul cu fișierele este separat de internet, iar viitorii clienți vor obține același lucru și niciun IP suplimentar nu va fi afectat.
De asemenea, se poate utiliza un reverse proxy pentru livrarea conținutului static, dar în cazul Nextcloud acest lucru nu va oferi un câștig de viteză semnificativ. Așadar, aceasta este opțională și la alegerea dvs.
Mă bucur să împărtășesc această poveste și sper că va fi utilă cuiva. Dacă știți metode mai elegante și eficiente pentru a rezolva problema propusă – aș aprecia comentariile!
Sursa: habr.com
