Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

Как да настроите OpenLiteSpeed за обратен прокси в Nextcloud, намиращ се в вътрешната мрежа?

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

Въпреки че OpenLiteSpeed е най-известен като «ускорител» на WordPress, в днешната статия ще покажа доста специфично негово приложение. По-точно, обратното прокси на заявките. Може би ще кажете, че за това обикновено се използва nginx? Съгласявам се. Но LSWS наистина ни стана любим!

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

Схемата изглежда така:

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

Ясно е, че схемата е опростена, тъй като организацията на инфраструктурата на уеб услугите не е темата на днешната статия.

Също така в тази статия ще пропусна инсталирането и основната настройка на 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.

Задача:
Да достигнем от интернет по линка ‘https://cloud.connect.link‘ (SSL) до Nextcloud в вътрешната мрежа.

  • Инсталираме OpenLiteSpeed на Ubuntu 18.04.2.

Добавяме репозиторий:

wget -O — http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh |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 управлението. http://cloud.connect.link:7080
Дефолтно потребителско име/парола: admin/123456

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси
Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

Създаваме «слушател» (Listeners > Add), го наричаме «https». Указваме му порт 443 и отбелязваме, че ще бъде Secure:

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

Остава да конфигурираме пренаписването на url, за да се насочат http-запитванията към https.
(Между другото, кога вече ще свърши това? Време е браузърите и другият софтуер по подразбиране да идват на https, а пренасочването на без-SSL да се прави ръчно при необходимост).
Включваме Enable Rewrite и записваме Rewrite Rules:

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

По странному недоразумению, нельзя применить привычные правила переработки Rewrite в Graceful restart. Поэтому перезапустим LSWS не изящно, а грубо и эффективно:

sudo systemctl restart lsws.service

За да сървърът да слуша и 80-ти порт, ще създадем още един Listener. Ще го наречем http, ще зададем 80-ти порт и ще укажем, че той ще бъде не-Secure:

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

С аналогична настройка на https listener, ще му присвоим нашия виртуален хост.

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

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

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

За да ни пусне 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’,
),

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

След това, в същата конфигурация трябва да укажем IP адреса на нашия прокси. Подчертавам, че адресът трябва да бъде този, който е видим за сървъра Nextcloud, т.е. IP на локалния интерфейс на LSWS. Без тази стъпка уеб интерфейсът на Nextcloud работи, но приложенията не се авторизират.

‘trusted_proxies’ =>
array (
0 => ‘172.16.22.100’,
),

Отлично, след това можем да влезем в интерфейса за авторизация:

Nextcloud отвътре, а отвън OpenLiteSpeed: настройваме обратното прокси

Задачата е решена! Сега всеки клиент може безопасно да използва
файловото облако

по своя персонален url, сървърът с файловете е отделен от интернет, бъдещите клиенти ще получат същото и нито един допълнителен IP адрес няма да пострада.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster