При использовании в качестве прокси, данный сервер «срезает» часть контента (#18)
Решение не найдено, если требуется реверсивное проксирование, то лучше сразу использовать сервер gmid
Многозадачный сервер для протокола 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 вместо разных портов, достаточно настроить Адрес из подсети 300::/64.
Сертификаты в данном примере должны быть сконфигурированы на соответствующий домен, например для 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://