Onion-Location یک راه آسان برای تبلیغ یک سایت Onion به کاربران است. می‌توانید یک سرور وب را برای نشان‌دادن سرآیند Onion-Location پیکربندی کنید یا یک مشخصهٔ HTML <meta>‎ در وب‌سایت اضافه کنید.

برای معتبر‌بودن سرآیند شرایط زیر باید برآورده شود:

  • مقدار Onion-Location باید یک URL معتبر با پروتکل ‎http:‎ یا https:‎ و نام میزبان onion. باشد.
  • صفحه وبی که سرآیند Onion-Location را تعریف می‌کند باید از طریق HTTPS ارائه شود.
  • صفحه وبی که سرآیند Onion-Location را تعریف می‌کند نباید یک سایت Onion باشد.

در این صفحه، دستورها برای مدیریت سرور وب مبتنی بر سیستم‌عامل‌های شبیه به دبیان است و ممکن است با سیستم‌های دیگر متفاوت باشد. مستندات سرور وب و سیستم‌عامل خود را بررسی کنید.

Apache

برای پیکربندی این سرآیند در Apache 2.2 یا بالاتر، نیاز دارید ماژول‌های headers و rewrite را به‌کار انداخته و فایل Virtual Host وب‌سایت را ویرایش کتید.

گام ۱. سرآیندها را به‌کار اندازید و ماژول‌ها را بازنویسی کرده و Apache2 را مجدداً بارگذاری کنید

 $ sudo a2enmod headers rewrite

 $ sudo systemctl reload apache2

اگر پیغام خطایی دریافت کردید، مشکلی رخ داده است و تا زمانی که متوجه علت عدم کارکرد آن نشده‌اید، نمی‌توانید ادامه دهید.

گام ۲. سرآیند Onion-Location را به فایل پیکربندی میزبان مجازی خود اضافه کنید

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

جایی که your-onion-address.onion نشانی سرویس Onion است که می‌خواهید تغییر مسیر دهید و {REQUEST_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>

گام ۳. Apache را مجدداً بارگذاری کنید

سرویس apache2 را دوباره بارگذاری کنید تا تغییرات پیکربندی شما اعمال شود:

 $ sudo systemctl reload apache2 

اگر پیغام خطایی دریافت کردید، مشکلی رخ داده است و تا زمانی که متوجه علت عدم کارکرد آن نشده‌اید، نمی‌توانید ادامه دهید.

گام ۴. آزمودن Onion-Location

برای آزمودن اینکه آیا Onion-Location کار می‌کند یا خیر، سرآیندهای HTTP وب‌سایت را واکشی کنید، برای مثال:

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

به‌دنبال ورودی onion-location و نشانی سرویس Onion بگردید. یا وب‌سایت را در مرورگر Tor باز کنید و یک قرص بنفش در نوار نشانی ظاهر می‌شود.

Nginx

برای پیکربندی سرآیند Onion-Location، اپراتور سرویس باید ابتدا یک سرویس Onion را پیکربندی کند.

گام ۱. با تنظیم موارد زیر در torrc یک سرویس Onion ایجاد کنید:

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

گام ۲. فایل پیکربندی وب‌سایت را ویرایش کنید

در ‎/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;
}

گام ۳. پیکربندی وب‌سایت را بیازمایید

 $ sudo nginx -t

سرور وب باید تأیید کند که ترکیب جدید به‌درستی کار می‌کند:

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

گام ۴. nginx را دوباره راه‌اندازی کنید

 $ sudo nginx -s reload

اگر پیغام خطایی دریافت کردید، مشکلی رخ داده است و تا زمانی که متوجه علت عدم کارکرد آن نشده‌اید، نمی‌توانید ادامه دهید.

گام ۵. آزمودن Onion-Location

برای آزمودن اینکه آیا Onion-Location کار می‌کند یا خیر، سرآیندهای HTTP وب‌سایت را واکشی کنید، برای مثال:

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

به‌دنبال ورودی onion-location و نشانی سرویس Onion بگردید. یا وب‌سایت را در مرورگر 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 بگردید. یا وب‌سایت را در مرورگر Tor باز کرده و یک قرص بنفش در نوار نشانی ظاهر می‌شود.

استفاده از مشخصهٔ HTML <meta>

رفتار یکسان Onion-Location شامل گزینه‌ی تعریف آن به‌عنوان یک مشخصهٔ HTML <meta> http-equiv است. این ممکن است توسط وب‌سایت‌هایی استفاده شود که ترجیح می‌دهند (یا نیاز دارند) تا یک 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 که می‌خواهید تغییر مسیر دهید جایگزین کنید.

محدودیت‌ها

HTML نمی‌تواند نشانی درخواستی را بخواند و آن را به‌صورت پویا در تگ http-equiv <meta>‎ وارد کند. به همین دلیل، بازدیدکنندگان همیشه به نشانی ‎.onion مشخص‌شده در قسمت محتوای برچسب متا هدایت می‌شوند، صرف نظر از اینکه در کدام صفحهٔ فرعی هستند.

بنابراین در صورت امکان توصیه می‌کنیم از یکی از روش‌های فوق استفاده کنید.

اطلاعات بیشتر

مشخصات Onion-Location‏ را بخوانید.