Onion-Location – это простой способ рекламировать onion-сайт пользователям. Вы можете либо настроить веб-сервер на отображение заголовка Onion-Location, либо добавить атрибут HTML-тегу <meta> на веб-сайте.

Чтобы заголовок был действительным, необходимо выполнить следующие условия:

  • Значение Onion-Location должно быть допустимым URL-адресом с протоколом http: или https: и именем хоста .onion.
  • Веб-страница, определяющая заголовок Onion-Location, должна обслуживаться по протоколу HTTPS.
  • Веб-страница, определяющая заголовок Onion-Location, не должна быть onion-сайтом.

На этой странице команды для управления веб-сервером основаны на Debian-подобных операционных системах и могут отличаться от других систем. Сверьтесь с документацией по вашим веб-серверу и операционной системе.

Apache

Чтобы настроить этот заголовок Onion-Location в Apache версии 2.2 и выше, необходимо включить модули headers и rewrite и отредактировать файл виртуального хоста веб-сайта.

Шаг 1. Включите заголовки, перезапишите модули и перезагрузите Apache2

 $ sudo a2enmod headers rewrite

 $ sudo systemctl reload apache2

Если вы получили сообщение об ошибке – что-то пошло не так, и вы не сможете продолжить, пока не выясните, почему это не сработало.

Шаг 2. Добавьте заголовок Onion-Location в файл конфигурации виртуального хоста

Header set Onion-Location "http://your-onion-address.onion%{REQUEST_URI}s"

Где your-onion-address.onion – это адрес Onion-ресурса, который вы хотите перенаправить, а {REQUEST_URI}компонент пути запрошенного URI, такие как "/index.html".

Пример виртуального хоста:

     <VirtualHost *:443>
       ServerName <your-website.tld>
       DocumentRoot /path/to/htdocs

       Header set Onion-Location "http://your-onion-address.onion%{REQUEST_URI}s"

       SSLEngine on
       SSLCertificateFile "/path/to/www.example.com.cert"
       SSLCertificateKeyFile "/path/to/www.example.com.key"
     </VirtualHost>

Шаг 3. Перезагрузите Apache

Перезагрузите службу apache2, чтобы выполненные изменения конфигурации вступили в силу:

 $ sudo systemctl reload apache2 

Если вы получили сообщение об ошибке – что-то пошло не так, и вы не сможете продолжить, пока не выясните, почему это не сработало.

Шаг 4. Протестируйте ваш Onion-Location

Чтобы проверить, работает ли Onion-Location, извлеките HTTP-заголовки веб-сайта, например:

 $ wget --server-response --spider your-website.tld

Найдите запись onion-location и адрес Onion-ресурса. Или откройте веб-сайт в Tor Browser, и в адресной строке появится фиолетовая таблетка.

Nginx

Чтобы настроить заголовок Onion-Location, оператор ресурса должен сначала настроить Onion-ресурс.

Шаг 1. Создайте Onion-ресурс, выполнив следующие настройки в torrc:

HiddenServiceDir /var/lib/tor/hs-my-website/
HiddenServiceVersion 3
HiddenServicePort 80 unix:/var/run/tor-hs-my-website.sock

Шаг 2. Отредактируйте файл конфигурации веб-сайта

В /etc/nginx/conf.d/<your-website>.conf добавьте заголовок Onion-Location и адрес Onion-ресурса. Например:

    add_header Onion-Location http://<your-onion-address>.onion$request_uri;

Файл конфигурации с Onion-Location должен выглядеть следующим образом:

server {
    listen 80;
    listen [::]:80;

    server_name <your-website.tld>;

    location / {
       return 301 https://$host$request_uri;
    }

}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name <your-website.tld>;

    # managed by Certbot - https://certbot.eff.org/
    ssl_certificate /etc/letsencrypt/live/<hostname>/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/<hostname>/privkey.pem;

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header Onion-Location http://<your-onion-address>.onion$request_uri;

    # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    access_log /var/log/nginx/<hostname>-access.log;

    index index.html;
    root /path/to/htdocs;

    location / {
            try_files $uri $uri/ =404;
    }
}

server {
        listen unix:/var/run/tor-hs-my-website.sock;

        server_name <your-onion-address>.onion;

        access_log /var/log/nginx/hs-my-website.log;

        index index.html;
        root /path/to/htdocs;
}

Шаг 3. Проверьте конфигурацию веб-сайта

 $ sudo nginx -t

Веб-сервер должен подтвердить, что новый синтаксис работает:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Шаг 4. Перезапустите nginx

 $ sudo nginx -s reload

Если вы получили сообщение об ошибке – что-то пошло не так, и вы не сможете продолжить, пока не выясните, почему это не сработало.

Шаг 5. Протестируйте ваш Onion-Location

Чтобы проверить, работает ли Onion-Location, извлеките HTTP-заголовки веб-сайта, например:

 $ wget --server-response --spider your-website.tld

Найдите запись onion-location и адрес Onion-ресурса. Или откройте веб-сайт в Tor Browser, и в адресной строке появится фиолетовая таблетка.

Caddy

По умолчанию Caddy поддерживает автоматический HTTPS, поэтому он формирует ваш сертификат TLS и обеспечивает перенаправление HTTP на HTTPS. Если вы используете Caddy 2, чтобы включить заголовок Onion-Location, добавьте следующее объявление в Caddyfile:

header Onion-Location http://<your-onion-address>.onion{path}

Если вы используете статический сайт и у вас есть onion-адрес в переменной среды $TOR_HOSTNAME, ваш Caddyfile будет выглядеть следующим образом:

your-website.tld

header Onion-Location http://{$TOR_HOSTNAME}{path}
root * /var/www
file_server

Тестирование: Протестируйте его с помощью:

 $ wget --server-response --spider your-website.tld

Найдите запись onion-location и адрес Onion-ресурса. Или откройте веб-сайт в Tor Browser и проверьте в адресной строке наличие фиолетовой таблетки.

Использование атрибута HTML-тега <meta>

Идентичное поведение Onion-Location включает в себя возможность определения его как атрибута http-equiv HTML-тега <meta>. Это может использоваться веб-сайтами, которые предпочитают (или нуждаются) в определении Onion-Location путем изменения обслуживаемого HTML-содержимого вместо добавления нового заголовка HTTP. Заголовок Onion-Location будет эквивалентен <meta http-equiv="onion-location" content="http://<your-onion-service-address>.onion" />, добавленному в HTML-элемент заголовка веб-страницы. Замените <your-onion-service-address.onion> на Onion-ресурс, на который вы хотите выполнить перенаправление.

Ограничения

HTML не может прочитать запрошенный URL-адрес и динамически вставить его в атрибут http-equiv тега <meta>. По этой причине посетители всегда перенаправляются на URL-адрес .onion, указанный в контентной части тега meta, независимо от того, на какой подстранице они находятся.

Поэтому, по возможности, рекомендуем использовать один из вышеперечисленных методов.

Дополнительная информация

Ознакомьтесь со спецификацией на Onion-Location.