Обратный прокси
Обратный прокси позволяет предоставить доступ к сайту или приложению через домен, настроенный в ispmanager. Он принимает запросы пользователей, передает их целевому серверу или приложению и возвращает полученные ответы. Такой получатель запросов называется апстримом: это может быть приложение на том же сервере, приложение в Docker-контейнере, удаленный веб-сервер или другой прокси.
Пользователь → Обратный прокси → Апстрим
Пользователь ← Обратный прокси ← АпстримПреимущества обратного проксирования:
- Безопасность: прокси помогает скрыть от клиентов IP-адрес и внутреннюю структуру апстрима.
- SSL-терминация: на прокси можно настроить HTTPS. Тогда HTTPS-трафик будет расшифровывать прокси, снижая нагрузку на апстрим, а соединение между прокси и апстримом может работать по HTTP.
- Кеширование: на прокси можно настроить кеширование ответов. Тогда при повторных запросах прокси будет отдавать ответы без нового обращения к апстриму, что ускорит работу сайта или приложения.
Как работает прокси
В ispmanager в качестве прокси используется Nginx.
Способы проксирования
Доступно 2 способа проксирования: через прокси-сайт или проксирование отдельных путей. Правила проксирования отдельных путей можно настроить как для обычного, так и для прокси-сайта.
| Вариант | Что проксируется | Что происходит с остальными запросами |
|---|---|---|
| Прокси-сайт | Все запросы к домену. Для отдельных путей можно настроить дополнительные правила и направить их на другой апстрим | Запросы к корню сайта и к путям без отдельных правил передаются основному апстриму |
| Проксирование отдельных путей | Только запросы к указанным путям | Остальные запросы обрабатываются основным сайтом: например, PHP-, Node.js- или Python-приложением |
Способы подключения апстрима
Способ подключения зависит от цели проксирования, т. е. того, где расположен апстрим:
| Цель проксирования | Способ подключения |
|---|---|
| Локальный сервер | сокет-файл или URL вида http://127.0.0.1:ПОРТ |
| Удаленный сервер | URL |
| Docker-контейнер | порт Docker-контейнера |
Когда нужен прокси
Выбор способа проксирования и способа подключения зависит от ваших задач. Например:
| Задача | Способ проксирования | Способ подключения |
|---|---|---|
| Открыть по домену приложение из Docker-контейнера | Прокси-сайт | Порт Docker-контейнера |
Основной сайт на PHP, а /api обслуживает Java-приложение | Обычный сайт + проксирование пути /api | URL http://127.0.0.1:3000 или сокет |
| Сайт переехал на другой сервер, а домен и SSL остаются в панели | Прокси-сайт | URL внешнего сервера |
| Приложение работает только по HTTP, а нужен HTTPS | Прокси-сайт с SSL-сертификатом | URL с http:// |
Требования для настройки прокси
- Панель ispmanager лайт, про или хост
- Веб-сервер Nginx или связка Apache + Nginx
- Установленный Docker, если планируется использовать Docker-контейнер
Апстрим должен быть доступен с сервера ispmanager, на котором работает прокси:
Способ подключения Что указать или подготовить URL HTTP- или HTTPS-адрес апстрима. Он может быть локальным, например http://127.0.0.1:3000, или удаленным, напримерhttps://app.example.com. Для доступа по доменному имени DNS-записи домена должны указывать на сервер с прокси. Для доступа по HTTPS у домена должен быть настроен действующий SSL-сертификатСокет-файл Путь к сокет-файлу приложения. Сокет должен быть доступен процессам Nginx Порт Docker-контейнера Работающий контейнер и сопоставление порта приложения в контейнере с портом сервера, через который прокси сможет подключиться к приложению
Ограничения для прокси-сайта
Для прокси-сайта недоступны следующие возможности:
- установка CMS и веб-скриптов
- конструктор Site.pro
- страницы ошибок, перенаправления, управление доступом к каталогам
- настройки обработчиков PHP / Node.js / Python, CGI, каталог сайта
- кеширование статики Nginx, расширения статических файлов, настройки времени кеширования
Для обычного сайта, у которого проксируются лишь отдельные пути, эти возможности доступны.
Настройка прокси
Настройка прокси выполняется под учетной записью уровня администратор или выше.
Шаг 1. Подготовка приложения
Запустите приложение и убедитесь, что оно принимает запросы.
Если приложение работает в Docker-контейнере, проверьте сопоставление портов. Например, если приложение слушает порт 3000 внутри контейнера, а этот порт опубликован на порту 8080 сервера, для подключения с сервера используется порт 8080.
Если приложение доступно по URL, предварительно проверьте его ответ с сервера, на котором работает прокси:
curl -i http://127.0.0.1:8080/Адрес и порт замените своими. Для удаленного апстрима используйте его URL.
Шаг 2. Создание прокси-сайта
- Перейдите в раздел Сайты.
- На панели инструментов нажмите Создать сайт → Обратный прокси.

- Укажите параметры сайта. Обязательные параметры отмечены звездочками.
- Проксируемый домен* — доменное имя, по которому сайт будет доступен в интернете
- Владелец сайта* — пользователь, которому будет принадлежать сайт
- SSL-сертификат* — сертификат для защищенного соединения:
- Новый бесплатный от Let's Encrypt
- Новый самоподписанный
- Существующий
- Не используется
- Укажите параметры проксирования. Обязательные параметры отмечены звездочками.
- Сохраните изменения.
Прокси-сайт появится в разделе Сайты и будет отмечен значком
. Для просмотра добавленных проксирований нажмите на этот значок. Сразу после создания сайта там будет отображаться одно проксирование — для его корня.
Шаг 3. Добавление проксирования для пути
- Перейдите в раздел Сайты.
- Возле нужного сайта нажмите
. - В контекстном меню выберите Проксирование запросов.
- На панели инструментов нажмите Создать проксирование.

- Укажите путь проксирования:
- Проксируемый путь* — путь на домене, запросы к которому будут перенаправляться на апстрим. Путь задается относительно корня домена. Например, если указать путь
blogна доменеexample.com, проксироваться будут запросы кhttp(s)://example.com/blog. Для каждого пути можно создать только одно проксирование.
- Проксируемый путь* — путь на домене, запросы к которому будут перенаправляться на апстрим. Путь задается относительно корня домена. Например, если указать путь
- Укажите параметры проксирования. Обязательные параметры отмечены звездочками.
- Сохраните изменения.
У сайта, для которого были добавлены проксирования, появится значок
. Чтобы просмотреть добавленные проксирования, нажмите на этот значок.
Шаг 4. Проверка работы прокси
Проверьте доступ через домен
Откройте сайт по настроенному адресу. Проверьте не только главную страницу, но и основные действия: загрузку ресурсов, переходы между страницами и запросы к API, если они используются.
Для проверки ответа через командную строку выполните команду. Если HTTPS еще не настроен, используйте http://.
curl -i https://ПРОКСИ-ДОМЕН/Ожидаемый результат зависит от приложения: это может быть успешный ответ, перенаправление на страницу входа или запрос авторизации.
Проверьте отдельный путь
Если настроено проксирование /api, запросите существующий ресурс приложения:
curl -i https://example.com/apiЗатем проверьте ресурс за пределами проксируемого пути. Он должен обрабатываться обычным сайтом или основным апстримом — в зависимости от выбранного варианта настройки.
Проверьте HTTPS и перенаправления
Убедитесь, что браузер не сообщает об ошибке сертификата, приложение не перенаправляет пользователя на внутренний адрес и не возникает циклических перенаправлений.
Если результат отличается от ожидаемого, проверьте журналы Nginx и приложения.
Параметры проксирования
Базовые настройки
Цель проксирования* — адрес апстрима:
URL* — URL в формате
http(s)://IP_ИЛИ_ДОМЕН/РЕСУРСПуть до сокет-файла — путь к сокет-файлу на локальном сервере с ispmanager
- Docker-контейнер — контейнер, в котором запущено приложение, выступающее в роли апстрима
- Порт — порт контейнера, который вы указали при настройке сопоставления портов
Расширенные настройки
- Кешировать ответы апстрима — установите галочку, чтобы ответы апстрима кешировались на прокси. По умолчанию кешируются ответы на GET- и HEAD-запросы. Параметры кеширования (размер, время жизни) задаются в конфигурационном файле панели.
- Таймауты*:
- Таймаут соединения — время, отведенное на установку соединения между прокси и апстримом. Если за это время соединение не будет установлено, запрос будет прерван и клиент получит ошибку. Значение по умолчанию: 30 секунд.
- Таймаут отправки — время, отведенное на отправку запроса от прокси к апстриму. Отсчитывается между операциями записи: если апстрим за это время не принимает очередную порцию данных, соединение обрывается. Значение по умолчанию: 120 секунд.
- Таймаут ожидания ответа — время, отведенное на получение прокси ответа от апстрима. Отсчитывается между операциями чтения: если апстрим не отвечает дольше указанного времени, соединение закрывается. Значение по умолчанию: 180 секунд.
- Заголовки — заголовки, которые прокси передает с запросом апстриму. Заголовки Host, X-Forwarded-For, X-Forwarded-Proto и X-Forwarded-Port добавляются автоматически. Чтобы переопределить Host, добавьте новый заголовок Host со своим значением. Значения заголовков подставляются в кавычках, чтобы исключить инъекцию директив.
Действия с проксированиями
Очистка кеша прокси
Кеш автоматически обновляется при истечении его срока жизни. При необходимости очистите его вручную:
- Авторизуйтесь в панели под учетной записью уровня администратор или выше.
- Перейдите в раздел Сайты.
- Возле нужного сайта нажмите
. - В контекстном меню выберите Проксирование запросов.
- Выберите проксируемый путь и на панели инструментов нажмите
.
Для выбранного проксирования будет удален каталог с кешем и создан заново пустым.
Удаление проксирований
- Авторизуйтесь в панели под учетной записью уровня администратор или выше.
- Перейдите в раздел Сайты.
- Выберите нужный сайт и на панели инструментов нажмите
.
Будут удалены сам сайт, все его проксирования, конфигурационные файлы Nginx, каталоги кеша и служебные каталоги.
- Авторизуйтесь в панели под учетной записью уровня администратор или выше.
- Перейдите в раздел Сайты.
- Возле нужного сайта нажмите
. - В контекстном меню выберите Проксирование запросов.
- Выберите путь проксирования и на панели инструментов нажмите
.
Будут удалены проксирование, его конфигурационный файл Nginx и каталог кеша.
Конфигурационные файлы прокси
Правила проксирования
Конфигурация правил проксирования состоит из двух уровней и включает следующие файлы:
/etc/nginx/vhosts-resources/ДОМЕН/reverse-proxy.d/ID_ПРОКСИРОВАНИЯ.conf— конфигурационный файл правил проксирования для конкретного пути. Называется по идентификатору в таблице базы данных reverse_proxy/etc/nginx/vhosts-resources/ДОМЕН/reverse-proxy.conf— индексный файл, в который включаются конфигурационные файлы правил проксирования для всех путей на домене. Включается в секциюserverконфигурационного файла сайта
Схема подключения конфигурационных файлов выглядит следующим образом:

Для просмотра и редактирования конфигурационного файла проксирования:
- Авторизуйтесь в панели под учетной записью уровня администратор или выше.
- Перейдите в раздел Сайты.
- Возле нужного сайта нажмите
. - В контекстном меню выберите Проксирование запросов.
- Выберите проксируемый путь и на панели инструментов нажмите
.
location / {
resolver 1.1.1.1 8.8.8.8 valid=300s;
proxy_pass $rp_upstream$request_uri;
proxy_redirect https://ПРОКСИ /;
access_log /usr/local/mgr5/var/nginx.log ispmgr_trafstat;
access_log /var/www/httpd-logs/ПРОКСИ.access.log ispmgr_reverse_proxy;
proxy_set_header Host "custom_host";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_connect_timeout 30s;
proxy_send_timeout 120s;
proxy_read_timeout 180s;
set $rp_upstream https://АПСТРИМ;
proxy_ssl_server_name on;
proxy_ssl_name "Custom host";
proxy_cache rp_2;
proxy_cache_key $scheme$host$request_uri;
proxy_cache_methods GET HEAD;
proxy_cache_lock on;
proxy_cache_revalidate on;
proxy_cache_use_stale updating;
}Подробнее о параметрах конфигурации прокси — в официальной документации Nginx.
- resolver — серверы имен, которые будут использоваться для преобразования имени апстрима в IP-адрес. Могут быть указаны в виде домена/IP-адреса и номера порта (опционально). Значения по умолчанию: 1.1.1.1 8.8.8.8. Параметр valid показывает, на какой срок будут кешироваться ответы серверов имен. Значение по умолчанию: 300s (300 секунд)
- proxy_pass — адрес проксируемого ресурса
- proxy_redirect — адрес прокси-сайта, который Nginx передаст клиенту в заголовке ответа
- access_log — настройки логирования трафика и посещений для прокси: директива с ispmgr_reverse_proxy задает собственный формат журнала посещений, директива с ispmgr_trafstat включает для сайта логирование трафика
- proxy_set_header — заголовки запросов, которые прокси передает апстриму
- proxy_connect_timeout — таймаут соединения. Значение по умолчанию: 30s (30 секунд)
- proxy_send_timeout — таймаут отправки. Значение по умолчанию: 120s (120 секунд)
- proxy_read_timeout — таймаут ожидания ответа. Значение по умолчанию: 180s (180 секунд)
- set $rp_upstream — создание переменной в Nginx, в которую записывается адрес апстрима, куда прокси будет перенаправлять запросы
- proxy_cache — зона кеша проксирования, т. е. название каталога на диске, где хранится кеш для указанного пути. Имеет значение rp_ID, где ID — это идентификатор проксирования в таблице БД reverse_proxy
- proxy_cache_key — ключ кеширования, т. е. идентификатор закешированного ответа на запрос $scheme$host$request_uri, где $scheme — протокол запроса (HTTP или HTTPS), $host — домен запроса, $request_uri — путь к ресурсу на домене
- proxy_cache_methods — типы запросов, ответы на которые кешируются и отдаются из кеша. Значение по умолчанию: GET и HEAD. Остальные запросы всегда перенаправляются на апстрим
- proxy_cache_lock — если опция включена, при одновременных запросах к одному и тому же незакешированному ресурсу на апстрим перенаправляется только один запрос, а остальные ждут его ответа. Это защищает апстрим от потока одинаковых запросов. Значение по умолчанию: on — включено
- proxy_cache_revalidate — если опция включена, когда истекает срок жизни кеша, Nginx запрашивает у апстрима, изменился ли ответ. При отсутствии изменений кеш продлевается без полной перезагрузки. Ускоряет обработку запросов при истечении срока жизни кеша. Значение по умолчанию: on — включено
- proxy_cache_use_stale — если директива имеет параметр updating, пока запись кеша обновляется, клиентам отдается устаревшая копия. Ускоряет обработку запросов при обновлении кеша
Кеш
Конфигурация кеша проксирований состоит из двух уровней и включает следующие файлы:
/etc/nginx/conf.d/reverse-proxy-cache.d/ДОМЕН/ID_ПРОКСИРОВАНИЯ.conf— конфигурационный файл кеша для конкретного пути. Называется по идентификатору в таблице базы данных reverse_proxy/etc/nginx/conf.d/reverse-proxy-cache.conf— индексный файл, в который включаются конфигурационные файлы кеша для всех путей на домене. Включается в секциюhttpглобального конфигурационного файла Nginx
Данные кеша хранятся в каталоге /var/cache/nginx/reverse-proxy/ДОМЕН/ID_ПРОКСИРОВАНИЯ.
Схема подключения конфигурационных файлов выглядит следующим образом:

proxy_cache_path /var/cache/nginx/reverse-proxy/ДОМЕН/ID_ПРОКСИРОВАНИЯ levels=1:2 keys_zone=rp_ID_ПРОКСИРОВАНИЯ:1m max_size=64m inactive=24h use_temp_path=off;Параметры директивы берутся из конфигурации панели ispmgr.conf.
proxy_cache_path — определяет параметры кеширования:
- /var/cache/nginx/reverse-proxy/ДОМЕН/ID_ПРОКСИРОВАНИЯ — каталог, в который сохраняется кеш
- levels — иерархия вложенности папок кеша. Значение по умолчанию 1:2 означает, что Nginx создаст двухуровневую структуру:
• Первый уровень — каталог из 1 последнего символа хэша, например/c/
• Второй уровень — каталог из 2 предыдущих символов, например/29/
• Итоговый файл b7f54b2df7773722d382f4809d65029c сохранится в каталог/var/cache/nginx/reverse-proxy/ДОМЕН/ID_ПРОКСИРОВАНИЯ/c/29/ - keys_zone — зона в оперативной памяти для хранения метаданных кеша для данного проксирования. Значения по умолчанию:
- rp_ID_ПРОКСИРОВАНИЯ — ключ (идентификатор) зоны
- 1m — размер зоны (1 МБ)
- max_size — максимальный размер кеша на диске для данного проксирования. Значение по умолчанию: 64m (64 МБ)
- inactive — время жизни неактивного кеша. Если за это время к закешированному файлу ни разу не обратились, Nginx удалит его с диска. Значение по умолчанию: 24h (24 часа)
- use_temp_path — использование временной директории. Если опция включена, Nginx сначала сохраняет файл в общую временную директорию, а затем копирует в каталог кеша. Значение по умолчанию: off (отключено)
Таблицы прокси в базе данных
Информация о проксированиях сохраняется в базе данных панели.
Статус сайта хранится в таблице webdomain в поле reverse_proxy: on — сайт является прокси, off — сайт является обычным сайтом.
Параметры проксирования хранятся в таблице reverse_proxy.
- id — идентификатор проксирования.
- site_id — ссылка на таблицу webdomain. При удалении сайта удаляется и запись о проксировании.
- location — проксируемый путь.
- target_type — тип цели проксирования: 0 — URL, 1 — сокет, 2 — Docker-контейнер.
- target — целевой ресурс (URL, путь к сокету или КОНТЕЙНЕР:ПОРТ).
- cache_upstream_answer — статус кеширования ответов: on — включено, off — выключено.
- connect_timeout — таймаут соединения.
- send_timeout — таймаут отправки запроса.
- read_timeout — таймаут ожидания ответа.
- headers — пользовательские заголовки в кодировке base64.