====== Twins ====== При использовании в качестве прокси, данный сервер "срезает" часть контента ([[https://code.rocket9labs.com/tslocum/twins/issues/18|#18]]) Решение не найдено, если требуется реверсивное проксирование, то лучше сразу использовать сервер [[gemini_protocol:gmid|gmid]] Многозадачный сервер для протокола [[:gemini_protocol|Gemini]] с поддержкой кеширования, реверсивного проксирования и других функций. Написанный на языке Go. ===== Установка ===== go install code.rocketnine.space/tslocum/twins@latest Пример маршрутизации общего IPv4 адреса доменов first.host.org и second.host.org на разные ресурсы Yggdrasil: listen: "xx.xx.xx.xx:1965" hosts: first.host.org: cert: /home/twins/first.host.org/cert.pem key: /home/twins/first.host.org/key.rsa paths: - path: / proxy: gemini-insecure://[xxx:xxxx:xxxx:xxxx::xxxx]:1965 second.host.org: cert: /home/twins/second.host.org/cert.pem key: /home/twins/second.host.org/key.rsa paths: - path: / proxy: gemini-insecure://[xxx:xxxx:xxxx:xxxx::xxxx]:1966 По такому же принципу можно запустить службы на свободных локальных адресах IPv4 или использовать разный порт для каждого сервера.\\ На целевых (публичных) ресурсах Yggdrasil вместо разных портов, достаточно настроить [[yggdrasil:subnet_setting]]. Сертификаты в данном примере должны быть сконфигурированы на соответствующий домен, например для first.host.org: openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem -days 365 -nodes -subj "/CN=first.host.org" * если запись для IPv6 - квадратные скобки в CN не используются Для запуска указываем путь к бинарному файлу twins и вторым аргументом - путь к файлу конфигурации: /home/twins/go/bin/twins -config /home/twins/config.yaml Можно создать сервис: [Unit] Description=twins After=network.target [Service] Type=simple User=twins Group=twins WorkingDirectory=/home/twins/ ExecStart=/home/twins/go/bin/twins -config /home/twins/config.yaml StandardOutput=file:/home/twins/debug.log StandardError=file:/home/twins/error.log Restart=on-failure [Install] WantedBy=multi-user.target А также добавить автозапуск: systemctl daemon-reload systemctl enable twins systemctl start twins ===== Заметки ===== У сервера twins иногда бывают проблемы с кодировкой кириллических ресурсов, поэтому целевые хосты должны отдавать кодировку в заголовке: text/gemini; charset=utf-8 Как указано в readme, важно также указать размер контента (size) Чтобы отключить проверку сертификата, можно использовать псевдо-протокол %%gemini-insecure://%% ===== Ссылки ===== [[https://code.rocket9labs.com/tslocum/twins|Домашняя страница проекта]]