Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Jak skonfigurować OpenLiteSpeed do działania jako reverse proxy dla Nextcloud znajdującego się w wewnętrznej sieci?

To niesamowite, ale wyszukiwanie na Habrze po zapytaniu OpenLiteSpeed nie daje nic! Spieszę naprawić tę niesprawiedliwość, ponieważ LSWS to godny serwer webowy. Uwielbiam go za szybkość i nowoczesny interfejs administracyjny:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Mimo że OpenLiteSpeed jest najbardziej znany jako "przyspieszacz" WordPressa, w dzisiejszym artykule pokażę dość specyficzne jego zastosowanie. A mianowicie reverse proxy. Powiecie, że do tego przeważnie używa się nginx? Zgadzam się. Ale wyjątkowo polubiliśmy LSWS!

Proxy jest okej, ale dokąd? Do równie znakomitej usługi – Nextcloud. Używamy Nextcloud do tworzenia prywatnych „chmur wymiany plików”. Dla każdego klienta przydzielamy oddzielną VM z Nextcloud i nie chcemy ich wystawiać „na zewnątrz”. Zamiast tego przekierowujemy zapytania przez wspólne reverse proxy. To rozwiązanie pozwala:
1) usunąć serwer, na którym przechowywane są dane klienta, z internetu oraz
2) zaoszczędzić adresy IP.

Schemat wygląda tak:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Oczywiście schemat jest uproszczony, ponieważ organizacja infrastruktury usług webowych nie jest tematem dzisiejszego artykułu.

Również w tym artykule pominę instalację i podstawową konfigurację Nextcloud, tym bardziej że na Habrze znajdują się dedykowane temu materiały. Ale koniecznie pokażę ustawienia, bez których Nextcloud nie będzie działał za proxy.

Dane:
Nextcloud zainstalowany na hoście 1 i skonfigurowany do pracy przez http (bez SSL), ma tylko lokalny interfejs sieciowy oraz „szary” adres IP 172.16.22.110.
Skonfigurujemy OpenLiteSpeed na hoście 2. Posiada on dwa interfejsy, zewnętrzny (patrzy w internet) oraz wewnętrzny z adresem IP w sieci 172.16.22.0/24
Do adresu IP zewnętrznego interfejsu hosta 2 prowadzi DNS-owa nazwa cloud.connect.link

Zadanie:
Osiągnąć dostęp z internetu pod adresem ‘https://cloud.connect.link‘ (SSL) do Nextcloud w wewnętrznej sieci.

  • Instalujemy OpenLiteSpeed na Ubuntu 18.04.2.

Dodamy repozytorium:

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

instalujemy, uruchamiamy:

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

  • Minimalnie skonfigurujemy zaporę.

    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 twój adres zarządzania do dowolnego portu 7080
    sudo ufw enable

  • Skonfigurujmy OpenLiteSpeed jako reverse proxy.
    Utworzymy katalogi dla wirtualnego hosta.

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

Skonfigurujemy wirtualny host z interfejsu webowego LSWS.
Otwórz zarządzanie URL http://cloud.connect.link:7080
Domyślny login/hasło: admin/123456

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Dodajemy wirtualny host (Virtual Hosts > Add).
Podczas dodawania pojawi się komunikat o błędzie - braku pliku konfiguracyjnego. To normalne, można to rozwiązać klikając Click to create.

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Na zakładce General podajemy Document Root (choć nie będzie on potrzebny, bez niego konfiguracja się nie załaduje). Nazwa domeny, jeśli nie zostanie podana, zostanie wzięta z nazwy wirtualnego hosta, którą nazwaliśmy imieniem naszej domeny.

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Czas przypomnieć sobie, że to nie tylko serwer webowy, ale również reverse proxy. Następujące ustawienia wskażą LSWS, co i dokąd ma prostatować. W ustawieniach wirtualnego hosta otwieramy zakładkę External App i dodajemy nową aplikację typu Web server:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Podajemy nazwę i adres. Nazwę można podać dowolną, ale należy ją zapamiętać, będzie przydatna w kolejnych krokach. Adres to ten, w którym znajduje się Nextcloud w wewnętrznej sieci:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

W tych samych ustawieniach wirtualnego hosta otwieramy zakładkę Context i tworzymy nowy kontekst typu Proxy:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Podajemy parametry: URI = /, Web server = nextcloud_1 (nazwa z poprzedniego kroku)

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Restartujemy LSWS. Można to zrobić jednym kliknięciem z interfejsu webowego, cuda! (w moim głosie mówi dziedziczny myszewoz)

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy
Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

  • Instalujemy certyfikat, konfigurujemy https.
    Procedurę uzyskania certyfikatu pomijamy, umówmy się, że już go mamy i leży razem z kluczem w katalogu /etc/letsencrypt/live/cloud.connect.link.

Utworzymy 'nasłuchiwacz' (Listeners > Add), nazwiemy go 'https'. Wskaźmy mu port 443 i zaznaczmy, że będzie Bezpieczny:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Na zakładce SSL podajemy ścieżkę do klucza i certyfikatu:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

'Nasłuchiwacz' utworzony, teraz w sekcji Virtual Host Mappings dodamy do niego nasz wirtualny host:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Jeśli LSWS będzie prostatować tylko do jednego serwisu, można zakończyć konfigurację. Ale planujemy używać go do przekazywania zapytań do różnych 'instancji' w zależności od nazwy domeny. A wszystkie domeny będą miały swoje certyfikaty. Dlatego trzeba wejść do konfiguracji wirtualnego hosta i ponownie wskazać w zakładce SSL jego klucz i certyfikat. W przyszłości trzeba to robić dla każdego nowego wirtualnego hosta.

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Pozostaje skonfigurować przepisanie URL, aby zapytania http były kierowane na https.
(Swoją drogą, kiedy to już się skończy? Czas, aby przeglądarki i inne oprogramowanie domyślnie korzystały z https, a przekierowania na no-SSL były robione ręcznie w razie potrzeby).
Włączamy Enable Rewrite i zapisujemy Rewrite Rules:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Nie można zastosować reguł Rewrite w zwykły sposób za pomocą Graceful restart z powodu dziwnego nieporozumienia. Dlatego zrestartujemy LSWS w sposób nieco brutalny, ale efektywny:

sudo systemctl restart lsws.service

Aby serwer nasłuchiwał na porcie 80, stworzymy jeszcze jeden Listener. Nazwiemy go http, wskażemy port 80 i ustawimy, że będzie niebezpieczny:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Analogicznie do konfiguracji listenera https, przypiszemy go naszemu wirtualnemu hoście.

Teraz LSWS będzie nasłuchiwał na porcie 80 i przekazywał żądania na port 443, przepisując url.
Na zakończenie zalecam obniżenie poziomu logowania LSWS, który domyślnie ustawiony jest na Debug. W takim trybie logi rozmnażają się błyskawicznie! W większości przypadków poziom Warning jest wystarczający. Przechodzimy do Server Configuration > Log:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Na tym konfiguracja OpenLiteSpeed jako odwrotnego proxy została zakończona. Jeszcze raz restartujemy LSWS i idziemy pod link https://cloud.connect.link i widzimy:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Aby Nextcloud nas wpuścił, musimy dodać domenę cloud.connect.link do listy zaufanych. Edytujemy plik config.php. Nextcloud zainstalowałem automatycznie podczas instalacji Ubuntu i konfiguracja znajduje się tutaj: /var/snap/nextcloud/current/nextcloud/config.
Do klucza trusted_domains dodajemy parametr 'cloud.connect.link':

'trusted_domains' =>
array (
0 => '172.16.22.110',
1 => 'cloud.connect.link',
),

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Następnie w tej samej konfiguracji musimy wskazać adres IP naszego proxy. Zwracam uwagę, że adres musi być widoczny dla serwera Nextcloud, tzn. IP lokalnego interfejsu LSWS. Bez tego kroku działa interfejs webowy Nextcloud, ale aplikacje nie będą się autoryzować.

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

Świetnie, po tym możemy przejść do interfejsu logowania:

Nextcloud wewnątrz, a na zewnątrz OpenLiteSpeed: konfigurujemy reverse proxy

Zadanie zostało rozwiązane! Teraz każdy klient może bezpiecznie korzystać z "chmury plikowej" pod swoją osobistą url, serwer z plikami jest oddzielony od internetu, przyszli klienci dostaną to samo i żaden dodatkowy adres IP nie ucierpi.
Dodatkowo można użyć reverse proxy do dostarczania statycznych treści, ale w przypadku Nextcloud nie przyniesie to zauważalnego wzrostu prędkości. Więc jest to opcjonalne i zależy od życzenia.

Cieszę się, że mogłem podzielić się tą historią, mam nadzieję, że komuś się przyda. Jeśli znasz bardziej eleganckie i efektywne metody rozwiązania postawionego zadania – będę wdzięczny za komentarze!

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster