Скрытый сервис §
Установите Tor и настройте скрытый сервис, указав локальный порт. Отредактируйте /etc/tor/torrc
HiddenServiceDir /var/lib/tor/blog/
HiddenServicePort 80 127.0.0.1:8080
Директория должна быть выделенным путём, принадлежащим Tor — не вашим файлам сайта.1 1
Tor хранит здесь приватный ключ сервиса и файл hostname и требует полного владения директорией (chmod 700, пользователь debian-tor). Если указать сюда файлы сайта, Tor откажется запускаться.
Перезагрузите Tor и прочитайте сгенерированный адрес
$ sudo systemctl restart tor@default
$ sudo cat /var/lib/tor/blog/hostname
dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion
Раздача сайта §
Tor перенаправляет порт 80 onion-адреса на 127.0.0.1:8080, поэтому веб-сервер просто слушает на этом адресе. Добавьте блок сервера в nginx — без TLS, без HTTP/2, без QUIC, так как Tor использует простой TCP и предоставляет собственное шифрование.
server {
listen 127.0.0.1:8080;
server_name dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion;
root /srv/tor.david.alvarezrosa.com;
index index.html;
error_page 404 /404/index.html;
location / {
try_files $uri $uri/ =404;
}
}
Перезагрузите nginx — сайт живёт на Tor.
Сборка для onion §
Статический сайт зашивает базовый URL в абсолютные ссылки, поэтому сборка для clearnet будет отправлять посетителей обратно на clearnet домен даже при доступе через Tor. Решение — собрать второй экземпляр с onion-адресом как базовым URL
$ hugo --minify --baseURL="http://dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion/"
Деплой-конвейер делает это автоматически: каждый push собирает сайт один раз на каждый таргет — clearnet и Tor — и синхронизирует каждый в свой веб-корень, так что оба остаются в синхронизации без ручной работы.2 2 Базовая конфигурация машины описана в First Steps on a New Server; полная конфигурация находится в homelab репозитории, а GitHub Actions workflow, который собирает и разворачивает Tor-копию, расположен в репозитории самого сайта.
Всё. Читайте этот сайт через Tor по адресу dhevt6e4rtgbtr3jh53xrpwmgtilkah6nyjujocsspssrsexc7omxhid.onion.