Onion-Location は、ユーザーに Onion Site を宣伝する簡単な方法です。 Onion-Location ヘッダーを表示するようにウェブサーバーを構成するか、ウェブサイトに HTML の <meta> 属性を追加します。

ヘッダーを有効にするには、以下の条件を満たす必要があります。

  • Onion-Location 値は、http: または https: プロトコルと .onion ホスト名を持つ有効な URL である必要があります。
  • Onion-Location ヘッダーを定義するウェブページは、HTTPS 経由で提供される必要があります。
  • Onion-Location ヘッダーを定義するウェブページは、Onion Site であってはなりません。

このページでは、ウェブサーバーを管理するためのコマンドは 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 Service のアドレスで、 {REQUEST_URI} は「/index.html 」のようなリクエストされた URI のパスコンポーネントです。

仮想ホストの例:

     <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 を再読み込み

Apache 2 サービスを再度読み込み、設定の変更を有効にしてください。

 $ sudo systemctl reload apache2 

エラーメッセージが表示された場合、何か問題が発生したため、これが機能しなかった原因が分かるまで続行できません。

ステップ 4Onion-Location をテスト

Onion-Location が機能しているかどうかをテストするには、ウェブサイトの HTTP ヘッダーを取得します。

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

onion-location エントリーと Onion Service のアドレスを探してください。 あるいは、Tor Browser でウェブサイトを開くと、アドレスバーに紫色のマークが表示されます。

Nginx

Onion-Location ヘッダーを構成するには、サービスオペレーターは最初に Onion Service を構成する必要があります。

ステップ 1torrcに以下の内容を設定して、Onion Service を作成

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

エラーメッセージが表示された場合、何か問題が発生したため、これが機能しなかった原因が分かるまで続行できません。

ステップ 5Onion-Location をテスト

Onion-Location が機能しているかどうかをテストするには、ウェブサイトの HTTP ヘッダーを取得します。

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

onion-location エントリーと Onion Service のアドレスを探してください。 あるいは、Tor Browser でウェブサイトを開くと、アドレスバーに紫色のマークが表示されます。

Caddy

Caddy はデフォルトで自動 HTTPS 機能を備えているため、TLS 証明書を用意し、HTTP から HTTPS へのリダイレクトを処理します。 Caddy 2 をご利用の場合、Onion-Location ヘッダーを含めるには、Caddyfile に以下の宣言を追加してください。

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

静的なサイトを運営していて、$TOR_HOSTNAME環境変数に Onion アドレスがある場合、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 Browser でウェブサイトを開くと、アドレスバーに紫色のマークが表示されます。

HTML の <meta> 属性の使用

Onion-Location と同じ動作には、HTML の <meta> http-equiv 属性として定義するオプションが含まれます。 これは、新しい HTTP ヘッダーを追加する代わりに、提供される HTML コンテンツを変更して Onion-Location を定義することを好む (または必要とする) ウェブサイトで使用できます。 Onion-Location ヘッダーは、ウェブページの HTML head 要素に追加される <meta http-equiv="onion-location" content="http://<your-onion-service-address>.onion" /> に相当します。<your-onion-service-address.onion> は、リダイレクトしたい Onion Service に置き換えてください。

制限事項

HTML はリクエストされた URL を読み取ることができず、http-equiv<meta>タグに動的に挿入できません。 このため、訪問者はどのサブページにいるかにかかわらず、常に meta タグの content-part で指定された .onion URL にリダイレクトされます。

そのため可能であれば、上記のいずれかの方法を使用することをお勧めします。

詳細情報

Onion-Location の仕様をお読みください。