2024-02-10 12:53:55 +00:00

98 lines
3.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Twins ======
<WRAP round important 60%>
При использовании в качестве прокси, данный сервер "срезает" часть контента ([[https://code.rocket9labs.com/tslocum/twins/issues/18|#18]])
Решение не найдено, если требуется реверсивное проксирование, то лучше сразу использовать сервер [[gemini_protocol:gmid|gmid]]
</WRAP>
Многозадачный сервер для протокола [[:gemini_protocol|Gemini]] с поддержкой кеширования, реверсивного проксирования и других функций. Написанный на языке Go.
===== Установка =====
<code>
go install code.rocketnine.space/tslocum/twins@latest
</code>
Пример маршрутизации общего IPv4 адреса доменов first.host.org и second.host.org на разные ресурсы Yggdrasil:
<file - /home/twins/config.yaml>
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
</file>
По такому же принципу можно запустить службы на свободных локальных адресах IPv4 или использовать разный порт для каждого сервера.\\
На целевых (публичных) ресурсах Yggdrasil вместо разных портов, достаточно настроить [[yggdrasil:subnet_setting]].
Сертификаты в данном примере должны быть сконфигурированы на соответствующий домен, например для first.host.org:
<code>
openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem -days 365 -nodes -subj "/CN=first.host.org"
</code>
* если запись для IPv6 - квадратные скобки в CN не используются
Для запуска указываем путь к бинарному файлу twins и вторым аргументом - путь к файлу конфигурации:
<code>
/home/twins/go/bin/twins -config /home/twins/config.yaml
</code>
Можно создать сервис:
<file - /etc/systemd/system/twins.service>
[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
</file>
А также добавить автозапуск:
<code>
systemctl daemon-reload
systemctl enable twins
systemctl start twins
</code>
===== Заметки =====
У сервера twins иногда бывают проблемы с кодировкой кириллических ресурсов, поэтому целевые хосты должны отдавать кодировку в заголовке:
<code>
text/gemini; charset=utf-8
</code>
Как указано в readme, важно также указать размер контента (size)
Чтобы отключить проверку сертификата, можно использовать псевдо-протокол %%gemini-insecure://%%
===== Ссылки =====
[[https://code.rocket9labs.com/tslocum/twins|Домашняя страница проекта]]