Настроить доступ к API

Чтобы виджет мог обращаться к модулю lbcore-rest, настройте обратное проксирование через Nginx либо Apache. Внешний адрес API должен быть доступен по HTTPS: этот адрес нужно будет указать в параметре apiUrl при настройке виджета.

Перед настройкой

  1. Установите, настройте и запустите модуль lbcore-rest. В примерах предполагается, что он принимает HTTP-запросы по адресу 127.0.0.1:8080 на том же сервере, что и Nginx или Apache. Если модуль находится на другом сервере, замените 127.0.0.1 его адресом. В примерах используется порт 8080. Если вы указали другой порт в конфигурации lbcore-rest (параметр listen секции [Server]), указывайте этот же порт и в настройках проксирования.
  2. Подготовьте доменное имя для внешнего доступа к API. Если используете отдельный поддомен, настройте его DNS-запись на адрес сервера прокси.
  3. Подготовьте действующий TLS-сертификат для выбранного доменного имени, включая необходимую цепочку промежуточных сертификатов, и соответствующий закрытый ключ. Сертификат должен быть доверенным для браузеров абонентов.
  4. Обеспечьте доступ к HTTPS-порту веб-сервера — в примерах ниже используется порт 443.

При настройке замените значения из примеров (доменные имена и пути к сертификату и ключу) своими значениями. Если для основного домена HTTPS уже настроен, добавьте правила проксирования в его существующую HTTPS-конфигурацию.

Настройте Nginx либо Apache.

Настроить Nginx

Отдельный поддомен

Добавьте блок server для поддомена API:

server {
    listen 443 ssl;
    server_name api.operator.ru;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        # Если lbcore-rest находится на другом сервере,
        # укажите его адрес вместо 127.0.0.1.
        proxy_pass http://127.0.0.1:8080;
    }
}

В параметре apiUrl в настройках виджета нужно будет указать:

apiUrl: "https://api.operator.ru"

URL-префикс на основном домене

Добавьте location /api/ в HTTPS-блок основного сайта. Ниже показан фрагмент конфигурации: остальные настройки сайта нужно сохранить.

server {
    listen 443 ssl;
    server_name operator.ru;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    # Остальные настройки основного сайта.

    location /api/ {
        # Завершающий / удаляет внешний префикс /api/
        # при передаче запроса модулю.
        proxy_pass http://127.0.0.1:8080/;
    }
}

В параметре apiUrl в настройках виджета нужно будет указать адрес с внешним префиксом:

apiUrl: "https://operator.ru/api"

Виджет добавляет к базовому адресу путь /api/v1/public-payment. Поэтому внешний запрос в этом примере будет направлен на https://operator.ru/api/api/v1/public-payment, а модуль получит путь /api/v1/public-payment. Первое /api — префикс прокси, второе — часть пути метода. Сохраните завершающий / в proxy_pass, чтобы внешний префикс удалялся.

Применить настройки

Проверьте конфигурацию:

sudo nginx -t

Если проверка прошла успешно, перезагрузите конфигурацию Nginx. Например, в системе с systemd:

sudo systemctl reload nginx

Подробнее о настройке TLS — в документации Nginx.

Настроить Apache

Загрузите модули proxy, proxy_http и ssl. Например, в Debian:

sudo a2enmod proxy proxy_http ssl

Убедитесь, что Apache настроен на прослушивание порта 443. Если директива Listen 443 уже присутствует в конфигурации, добавлять её повторно не нужно.

Отдельный поддомен

Добавьте HTTPS-виртуальный хост для поддомена API:

<VirtualHost *:443>
    ServerName api.operator.ru

    SSLEngine on
    SSLCertificateFile /path/to/fullchain.pem
    SSLCertificateKeyFile /path/to/privkey.pem

    ProxyRequests Off

    # Если lbcore-rest находится на другом сервере,
    # укажите его адрес вместо 127.0.0.1.
    ProxyPass        "/" "http://127.0.0.1:8080/"
    ProxyPassReverse "/" "http://127.0.0.1:8080/"
</VirtualHost>

В параметре apiUrl в настройках виджета нужно будет указать:

apiUrl: "https://api.operator.ru"

URL-префикс на основном домене

Добавьте правила проксирования в HTTPS-виртуальный хост основного сайта. Ниже показан фрагмент конфигурации: остальные настройки сайта нужно сохранить.

<VirtualHost *:443>
    ServerName operator.ru

    SSLEngine on
    SSLCertificateFile /path/to/fullchain.pem
    SSLCertificateKeyFile /path/to/privkey.pem

    # Остальные настройки основного сайта.

    ProxyRequests Off
    ProxyPass        "/api/" "http://127.0.0.1:8080/"
    ProxyPassReverse "/api/" "http://127.0.0.1:8080/"
</VirtualHost>

В параметре apiUrl в настройках виджета нужно будет указать:

apiUrl: "https://operator.ru/api"

Как и в примере Nginx, внешний путь /api/api/v1/public-payment передаётся модулю как /api/v1/public-payment: правило проксирования заменяет внешний префикс /api/ на /.

Применить настройки

Убедитесь, что виртуальный хост включён. Проверьте конфигурацию и примените изменения. Например, в Debian с systemd:

sudo apache2ctl configtest

Если проверка прошла успешно:

sudo systemctl reload apache2

Команды включения модулей, виртуального хоста и управления службой зависят от операционной системы.

Подробнее — в документации Apache: настройка TLS и обратное проксирование.

Проверить доступ и настроить виджет

Укажите полученный HTTPS-адрес в apiUrl:

Вариант размещения Значение apiUrl
Отдельный поддомен https://api.operator.ru
Префикс /api/ на основном домене https://operator.ru/api

После настройки откройте страницу с виджетом и проверьте отправку запроса к API. В инструментах разработчика браузера убедитесь, что запрос отправляется по HTTPS и нет ошибок сертификата или соединения.

Если сайт с виджетом и API имеют разные источники, укажите источник сайта с виджетом в массиве cors секции [Server] файла конфигурации. Например, для страницы https://operator.ru/payment/ укажите cors = ["https://operator.ru"]. В этом параметре задаётся источник страницы (протокол, доменное имя и при необходимости порт), а не адрес API и не путь страницы. После изменения конфигурации перезапустите модуль.