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 の仕様をお読みください。