98 lines
3.8 KiB
Plaintext
98 lines
3.8 KiB
Plaintext
====== 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|Домашняя страница проекта]] |