Onion-Location - це простий спосіб рекламувати сайт onion для користувачів. Ви можете або налаштувати веб-сервер, щоб показувати заголовок Onion-Location, або додати на веб-сайт атрибут HTML <meta>.

Щоб заголовок був дійсним, необхідно виконати такі умови:

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

На цій сторінці команди для керування веб-сервером базуються на операційних системах, подібних до Debian, і можуть відрізнятися від інших систем. Перевірте документацію веб-сервера та операційної системи.

Apache

Щоб налаштувати цей заголовок в 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 Service. Або відкрийте веб-сайт у браузері Tor, і в адресному рядку з’явиться фіолетова таблетка.

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 Service. Приклад:

    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 Service. Або відкрийте веб-сайт у браузері Tor, і в адресному рядку з’явиться фіолетова таблетка.

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 Service. Або відкрийте веб-сайт у браузері Tor, та в адресному рядку з’явиться фіолетова таблетка.

Використання атрибута 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 head веб-сторінки. Замініть <your-onion-service-address.onion> на Onion Service, який ви хочете перенаправити.

Обмеження

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

Тому, якщо є можливість, рекомендуємо скористатися одним із наведених вище способів.

Докладніші відомості

Прочитайте специфікацію Onion-Location.