Как да настроите OpenLiteSpeed за обратен прокси в Nextcloud, намиращ се в вътрешната мрежа?
Не е за вярване, но търсене в Хабра за OpenLiteSpeed не дава нищо! Спешно трябва да поправим тази несправедливост, защото LSWS е достоен уеб сървър. Обичам го заради бързината и модния уеб интерфейс за администриране:

Въпреки че OpenLiteSpeed е най-известен като «ускорител» на WordPress, в днешната статия ще покажа доста специфично негово приложение. По-точно, обратното прокси на заявките. Може би ще кажете, че за това обикновено се използва nginx? Съгласявам се. Но LSWS наистина ни стана любим!
Проксирането е добре, но накъде? Към не по-малко забележителната услуга – Nextcloud. Използваме Nextcloud, за да създадем лични «облачни хранилища за файлове». За всеки клиент отделяме VM с Nextcloud и не искаме да ги излагаме «навън». Вместо това проксираме заявките през общо обратно прокси. Това решение позволява:
1) да премахнем сървъра, на който се съхраняват данните на клиентите, от интернет и
2) да спестим IP адреси.
Схемата изглежда така:

Ясно е, че схемата е опростена, тъй като организацията на инфраструктурата на уеб услугите не е темата на днешната статия.
Също така в тази статия ще пропусна инсталирането и основната настройка на Nextcloud, особено след като на Хабра има материали, посветени на тази тема. Но определено ще покажа настройките, без които Nextcloud няма да работи зад проксито.
Дадено:
Nextcloud е инсталиран на хост 1 и е настроен да работи по http (без SSL), има само локален мрежови интерфейс и «сив» IP адрес 172.16.22.110.
Нека настроим OpenLiteSpeed на хост 2. Той има два интерфейса, външен (със свързаност към интернет) и вътрешен с IP адрес в мрежата 172.16.22.0/24.
Към IP адреса на външния интерфейс на хост 2 води DNS името cloud.connect.link.
Задача:
Да достигнем от интернет по линка ‘‘ (SSL) до Nextcloud в вътрешната мрежа.
- Инсталираме OpenLiteSpeed на Ubuntu 18.04.2.
Добавяме репозиторий:
wget -O — |sudo bash
sudo apt-get update
инсталираме, стартираме:
sudo apt-get install openlitespeed
sudo /usr/local/lsws/bin/lswsctrl start
- Минимално настройване на защитната стена.
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 вашият управленски хост to any port 7080
sudo ufw enable - Настройваме OpenLiteSpeed като обратен прокси.
Създаваме директории за виртуалния хост.cd /usr/local/lsws/
sudo mkdir cloud.connect.link
cd cloud.connect.link/
sudo mkdir {conf,html,logs}
sudo chown lsadm:lsadm ./conf/
Настройваме виртуалния хост от уеб интерфейса на LSWS.
Отваряме URL управлението.
Дефолтно потребителско име/парола: admin/123456

Добавяме виртуален хост (Virtual Hosts > Add).
При добавянето ще се появи съобщение за грешка – липса на конфигурационен файл. Това е нормално и се решава с натискане на Click to create.

В раздела General ще зададем Document Root (въпреки че той няма да е необходим, без него конфиг не работи). Domain Name, ако не го посочите, ще бъде взет от Virtual Host Name, който сме нарекли с името на нашия домейн.

Сега е време да си припомним, че имаме не просто уеб сървър, а reverse proxy. Следващите настройки ще укажат на LSWS какво да проксирва и накъде. В настройките на виртуалния хост отваряме раздела External App и добавяме ново приложение тип Web server:

Посочваме име и адрес. Името може да бъде произволно, но трябва да го запомним, ще е полезно на следващите стъпки. Адресът е този, където живее Nextcloud в вътрешната мрежа:

В същите настройки на виртуалния хост отваряме раздела Context и създаваме нов контекст тип Proxy:

Посочваме параметрите: URI = /, Web server = nextcloud_1 (името от предишната стъпка)

Рестартираме LSWS. Това става с едно кликване от уеб интерфейса, чудеса! (в мен говори потомствен мишелов)


- Наставяме сертификата, конфигурираме https.
я пропускаме, да се разберем, че той вече е наличен и лежи заедно с ключа в директория /etc/letsencrypt/live/cloud.connect.link.
Създаваме «слушател» (Listeners > Add), го наричаме «https». Указваме му порт 443 и отбелязваме, че ще бъде Secure:

В раздела SSL посочваме пътя до ключа и сертификата:

«Слушателят» е създаден, сега в раздела Virtual Host Mappings добавяме нашия виртуален хост към него:

Ако LSWS ще проксирва само до един сервис, настройката може да приключи. Но ние планираме да го използваме за предаване на заявки към различни «инстанции» в зависимост от доменното име. И всички домейни ще имат свои сертификати. Следователно трябва да отидем в конфигурацията на виртуалния хост и отново да посочим в раздела SSL неговия ключ и сертификат. В бъдеще това трябва да се прави за всеки нов виртуален хост.

Остава да конфигурираме пренаписването на url, за да се насочат http-запитванията към https.
(Между другото, кога вече ще свърши това? Време е браузърите и другият софтуер по подразбиране да идват на https, а пренасочването на без-SSL да се прави ръчно при необходимост).
Включваме Enable Rewrite и записваме Rewrite Rules:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ } [R=301,L]

По странному недоразумению, нельзя применить привычные правила переработки Rewrite в Graceful restart. Поэтому перезапустим LSWS не изящно, а грубо и эффективно:
sudo systemctl restart lsws.service
За да сървърът да слуша и 80-ти порт, ще създадем още един Listener. Ще го наречем http, ще зададем 80-ти порт и ще укажем, че той ще бъде не-Secure:

С аналогична настройка на https listener, ще му присвоим нашия виртуален хост.
Сега LSWS ще слуша 80-ти порт и ще пренасочва заявките от него на 443, пренаписвайки url.
В завършек, препоръчвам да намалим нивото на логиране на LSWS, което по подразбиране е зададено на Debug. В този режим логовете се размножават светкавично! За повечето случаи нивото Warning е достатъчно. Отиваме в Server Configuration > Log:

С това настройката на OpenLiteSpeed като обратен прокси е завършена. Отново рестартираме LSWS, отиваме на връзката и виждаме:

За да ни пусне Nextcloud, е необходимо да добавим домейна cloud.connect.link в списъка с доверени. Отиваме да редактираме config.php. Nextcloud инсталирах автоматично при инсталацията на Ubuntu и конфигурацията се намира тук: /var/snap/nextcloud/current/nextcloud/config.
Към ключа trusted_domains добавяме параметъра ‘cloud.connect.link’:
‘trusted_domains’ =>
array (
0 => ‘172.16.22.110’,
1 => ‘cloud.connect.link’,
),

След това, в същата конфигурация трябва да укажем IP адреса на нашия прокси. Подчертавам, че адресът трябва да бъде този, който е видим за сървъра Nextcloud, т.е. IP на локалния интерфейс на LSWS. Без тази стъпка уеб интерфейсът на Nextcloud работи, но приложенията не се авторизират.
‘trusted_proxies’ =>
array (
0 => ‘172.16.22.100’,
),
Отлично, след това можем да влезем в интерфейса за авторизация:

Задачата е решена! Сега всеки клиент може безопасно да използва
файловото облако
по своя персонален url, сървърът с файловете е отделен от интернет, бъдещите клиенти ще получат същото и нито един допълнителен IP адрес няма да пострада.
Източник: habr.com
