Для получения корректного сертификата на Windows можно использовать Caddy в роли реверс-прокси. Он сам в автоматическом режиме получает и продлевает SSL-сертификат и отвечает по https на 443 порту, пробрасывая запросы к web-service по http.
test на домене club-is.ru (у клуба будут свой домен и хост с другим названием).C:\Caddy.caddy_windows_amd64.exe в созданную папку C:\Caddy.sc.exe create caddy start= auto binPath= "C:\Caddy\caddy_windows_amd64.exe run --config C:\Caddy\Caddyfile"
caddy на вкладке «Восстановление» для всех 3 сбоев поставьте «Перезапуск службы».В папке C:\Caddy создайте файл Caddyfile:
{
auto_https disable_redirects
}
test.club-is.ru {
reverse_proxy localhost:8080 {
header_up X-Real-IP {remote_host}
header_up Host {host}
}
}
test.club-is.ru нужно заменить на ваше зарегистрированное доменное имя, а 8080 — на порт http, на котором работает ваша web-service.
header_up Host {host} передаёт в web-service исходный адрес из запроса, а не localhost.
Глобальная опция auto_https disable_redirects отключает автоматическое перенаправление с HTTP (порт 80) на HTTPS (порт 443). Без неё Caddy сам переводит все запросы с 80-го порта на HTTPS.
Порт 80 при этом поднимается только для получения и продления сертификата Let's Encrypt. Сайт ClubIS на нём не отдаётся: reverse_proxy работает только по HTTPS. Сканеры и посторонние обращения на 80-й порт видят ответ самого Caddy, а не web-service. Закрыть 80-й порт снаружи нельзя — иначе сертификат не выдадут и не продлят.
По умолчанию Caddy принимает HTTPS на порту 443. Если на площадке нужен другой внешний порт (например, из соображений безопасности или из-за ограничений сети), укажите его в адресе сайта после имени хоста через двоеточие:
{
auto_https disable_redirects
}
test.club-is.ru:8443 {
reverse_proxy localhost:8080 {
header_up X-Real-IP {remote_host}
header_up Host {host}
}
}
В этом примере Caddy отвечает по HTTPS на порту 8443, а запросы проксирует на локальный web-service на порту 8080. Опция auto_https disable_redirects та же, что в основном примере: запросы с порта 80 не перенаправляются на HTTPS и не идут в web-service.
Дополнительно:
https://test.club-is.ru:8443/.Caddy получает SSL-сертификат для доменного имени, указанного в Caddyfile (например, test.club-is.ru), а не для IP-адреса сервера. Снаружи сайт отвечает по HTTPS только при обращении по этому домену.
В обычной настройке обращение по IP не отвечает — и так его нужно оставлять. Сканеры и боты чаще ходят именно по IP; без отдельного сайта в Caddyfile они не попадают в ClubIS.
Обращение по HTTPS на IP-адрес — например, https://203.0.113.10/ или https://203.0.113.10:8443/ — не поддерживается, даже если порт проброшен и служба Caddy запущена. Доверенный сертификат выпускается на доменное имя. Самоподписанный сертификат на IP внешние системы почти не используют.
Если ранее внешние интеграции были настроены на URL с IP-адресом и HTTPS — например, https://203.0.113.10:8443/api/... — после перехода на Caddy такие обращения работать не будут. Нужно перенастроить их на доменное имя площадки, например https://test.club-is.ru:8443/api/... (с портом, если он нестандартный) или https://test.club-is.ru/api/... (если используется порт 443).
Проверьте и обновите адреса в:
На DNS должна быть настроена A-запись с доменом площадки на IP сервера.
Этот блок нужен только тем, у кого интеграции уже ходят по http:// на IP сервера и их нельзя сразу перевести на домен. В обычный Caddyfile его добавлять не нужно.
Пока старые адреса ещё используются, добавьте в конец файла отдельный сайт. 203.0.113.10 замените на внешний IP сервера, 8080 — на порт web-service:
http://203.0.113.10 {
reverse_proxy localhost:8080 {
header_up X-Real-IP {remote_host}
header_up Host {host}
}
}
Префикс http:// обязателен. Без него Caddy пытается включить автоматический HTTPS для адреса, на который сертификат Let's Encrypt не выдаётся. Запросы вида http://203.0.113.10/ уходят в web-service. По HTTPS на этот же IP сайт по-прежнему не отвечает.
Когда интеграции переведены на доменное имя, удалите этот блок и перезапустите службу caddy. Оставлять ответ по IP не стоит: по адресу ходят сканеры, и без этого сайта они не доходят до ClubIS.
На одной машине один TCP-порт может прослушивать только одна программа. Если и Caddy, и web-service настроены на один и тот же порт (чаще всего 80 или 443), вторая служба не запустится или будет работать с ошибками.
При схеме с Caddy порты разделяются так:
Caddyfile) и для получения сертификата — по HTTP на порту 80.reverse_proxy.Проверьте настройки службы web-service: порт в службе и порт в reverse_proxy должны совпадать, но не должны совпадать с портами, на которых слушает Caddy (80, 443 или нестандартный HTTPS-порт из Caddyfile).
Типичная ошибка: web-service настроен на https и порт 443, а Caddy тоже занимает 443. Выберите одну схему — либо HTTPS напрямую в web-service (см. статью), либо HTTPS через Caddy, а web-service оставьте на http по отдельному порту.
Через стандартную оснастку Windows «Службы» (services.msc) запустите службу (или перезапустите, если на предыдущих этапах случайно запустили).