Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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:

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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 ‘https://cloud.connect.link‘ (SSL) către Nextcloud din rețeaua internă.

  • Instalăm OpenLiteSpeed pe Ubuntu 18.04.2.

Adăugăm repository-ul:

wget -O — http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh |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 http://cloud.connect.link:7080
Login/parol implicit: admin/123456

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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.

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

Î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.

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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:

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers
Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

  • Instalăm certificatul și configurăm https.
    Procedura de obținere a certificatului 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:

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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.

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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 ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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:

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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:

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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:

Nextcloud în interior, iar afară OpenLiteSpeed: configurăm proxy invers

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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster