Nextcloud вътре и извън OpenLiteSpeed: настройка на обратно прокси
Как да настроя OpenLiteSpeed за обръщане на прокси към Nextcloud във вътрешната мрежа?
Изненадващо, търсенето в Habré за OpenLiteSpeed не дава нищо! Бързам да поправя тази несправедливост, защото LSWS е приличен уеб сървър. Харесвам го заради неговата скорост и изискан интерфейс за уеб администриране:
Въпреки че OpenLiteSpeed е най-известен като "ускорител" на WordPress, в днешната статия ще покажа доста специфично използване на него. А именно обратно прокси на заявки (reverse proxy). Казвате, че е по-често да се използва nginx за това? Ще се съглася. Но боли толкова много, че се влюбихме в LSWS!
Проксирането е добре, но къде? В не по-малко прекрасна услуга - Nextcloud. Използваме Nextcloud за създаване на частни „облаци за споделяне на файлове“. За всеки клиент ние разпределяме отделна виртуална машина с Nextcloud и не искаме да ги излагаме „навън“. Вместо това, ние прокси заявки чрез общ обратен прокси. Това решение позволява:
1) премахнете сървъра, на който се съхраняват клиентските данни от интернет и
2) запазване на ip-адреси.
Диаграмата изглежда така:
Ясно е, че схемата е опростена, т.к организацията на инфраструктурата на уеб услугите не е темата на днешната статия.
Също така в тази статия ще пропусна инсталирането и основната конфигурация на nextcloud, особено след като има материали по тази тема на Habré. Но определено ще покажа настройките, без които Nextcloud няма да работи зад прокси.
Като се има предвид:
Nextcloud е инсталиран на хост 1 и е конфигуриран да работи през http (без SSL), има само локален мрежов интерфейс и "сив" IP адрес 172.16.22.110.
Нека конфигурираме OpenLiteSpeed на хост 2. Той има два интерфейса, външен (гледа към интернет) и вътрешен с IP адрес в мрежата 172.16.22.0/24
IP адресът на външен интерфейс на хост 2 е DNS име cloud.connect.link
Цел:
Вземете от интернет чрез връзката 'https://cloud.connect.link' (SSL) към Nextcloud във вътрешната мрежа.
Инсталиране на OpenLiteSpeed на Ubuntu 18.04.2.
sudo ufw позволяват ssh
sudo ufw по подразбиране позволява изходящи
sudo ufw по подразбиране отказва входящи
sudo ufw позволи http
sudo ufw разреши https
sudo ufw разреши от вашият хост за управление към всеки порт 7080
sudo ufw позволи
Настройте OpenLiteSpeed като обратен прокси.
Нека създадем директории под виртуалния хост.
cd /usr/local/lsws/
sudo mkdirc cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf,html,logs}
sudo chown lsadm:lsadm ./conf/
Нека конфигурираме виртуалния хост от уеб интерфейса на LSWS.
Отворете управлението на URL адреси http://cloud.connect.link:7080
Вход/парола по подразбиране: admin/123456
Добавете виртуален хост (Виртуални хостове > Добавяне).
При добавяне ще се появи съобщение за грешка - конфигурационният файл липсва. Това е нормално, решава се чрез щракване върху Щракнете, за да създадете.
В раздела Общи посочете корена на документа (въпреки че не е необходим, конфигурацията няма да излети без него). Името на домейна, ако не е посочено, ще бъде взето от името на виртуалния хост, което нарекохме име на домейн.
Сега е време да си припомним, че имаме не просто уеб сървър, а обратен прокси. Следните настройки ще кажат на LSWS какво да проксира и къде. В настройките на virtualhost отворете раздела External App и добавете ново приложение от типа на уеб сървъра:
Посочете име и адрес. Можете да посочите произволно име, но трябва да го запомните, то ще ви бъде полезно в следващите стъпки. Адресът е този, на който Nextcloud живее във вътрешната мрежа:
В същите настройки на виртуален хост отворете раздела Контекст и създайте нов контекст от типа Прокси:
Посочете параметрите: URI = /, уеб сървър = nextcloud_1 (име от предишната стъпка)
Рестартирайте LSWS. Това става с един клик от уеб интерфейса, чудеса! (в мен говори потомствен носител на мишка)
Поставяме сертификата, конфигурираме https. Процедурата за получаване на сертификат ще го пропуснем, ще се съгласим, че вече го имаме и ще лежим с ключа в директорията /etc/letsencrypt/live/cloud.connect.link.
Нека създадем "слушател" (Listeners > Add), нека го наречем "https". Насочете го към порт 443 и имайте предвид, че ще бъде защитен:
В раздела SSL посочете пътя до ключа и сертификата:
„Слушателят“ е създаден, сега в раздела Virtual Host Mappings ще добавим нашия виртуален хост към него:
Ако LSWS ще прокси само към една услуга, конфигурацията може да бъде завършена. Но планираме да го използваме за изпращане на заявки до различни „инстанции“ в зависимост от името на домейна. И всички домейни ще имат свои собствени сертификати. Следователно трябва да отидете до конфигурацията на virtualhost и отново да посочите неговия ключ и сертификат в раздела SSL. В бъдеще това трябва да се прави за всеки нов виртуален хост.
Остава да конфигурирате пренаписването на url така, че http заявките да се адресират до https. (Между другото, кога ще свърши това? Време е браузърите и другият софтуер да преминат към https по подразбиране и да пренасочат към no-SSL ръчно, ако е необходимо).
Включете Enable Rewrite и напишете правила за пренаписване:
Поради странно недоразумение е невъзможно да се приложат правилата за пренаписване с обичайното грациозно рестартиране. Затова ще рестартираме LSWS не грациозно, а грубо и ефективно:
sudo systemctl рестартирайте lsws.service
За да накарате сървъра да слуша порт 80, нека създадем друг слушател. Нека го наречем http, уточним 80-ия порт и че той ще бъде незащитен:
По аналогия с настройката на https listener, нека прикрепим нашия виртуален хост към него.
Сега LSWS ще слуша порт 80 и ще изпраща заявки до 443 от него, пренаписвайки URL адреса.
В заключение препоръчвам да намалите нивото на регистриране на LSWS, което е зададено на Debug по подразбиране. В този режим трупите се размножават със светкавична скорост! В повечето случаи нивото на предупреждение е достатъчно. Отидете на Конфигурация на сървъра > Регистър:
Това завършва конфигурацията на OpenLiteSpeed като обратен прокси. Още веднъж рестартирайте LSWS, следвайте връзката https://cloud.connect.link и виж:
За да ни позволи Nextcloud да влезем, трябва да добавим домейна cloud.connect.link към списъка с надеждни. Хайде да редактираме config.php. Инсталирах Nextcloud автоматично при инсталиране на Ubuntu и конфигурацията се намира тук: /var/snap/nextcloud/current/nextcloud/config.
Добавете параметъра „cloud.connect.link“ към ключа trusted_domains:
Освен това в същата конфигурация трябва да посочите IP адреса на нашия прокси. Обръщам внимание на факта, че адресът трябва да бъде посочен този, който е видим за сървъра Nextcloud, т.е. IP на локалния LSWS интерфейс. Без тази стъпка уеб интерфейсът на Nextcloud работи, но приложенията не са разрешени.
Страхотно, след това можем да влезем в интерфейса за оторизация:
Проблема решен! Сега всеки клиент може безопасно да използва „файловия облак“ на своя личен url, сървърът с файлове е отделен от интернет, бъдещите клиенти ще получават всичко по същия начин и нито един допълнителен IP адрес няма да бъде засегнат.
Освен това можете да използвате обратен прокси за доставяне на статично съдържание, но в случая на Nextcloud това няма да доведе до забележимо увеличение на скоростта. Така че е незадължително и незадължително.
Радвам се да споделя тази история, надявам се да е полезна на някого. Ако знаете по-елегантни и ефективни методи за решаване на проблема, ще съм благодарен за коментарите!