基本架构

Jun 2, 2023 at 3:28:07 AM
Screenshot 2023-06-01 at 5.57.49 PM

Cloudflare

位于最外层,服务用户,扛攻击。

需要一个专用的 Cloudflare 账号,一开始可以就先用 free tier 把服务调通。后续如果需要更细致的 cache 规则设定,可能会需要升级到 $200 每月的 business tier。

NGINX

Lua 规则将 Cloudflare 发送过来的 request header 中的 .bit 域名提取出来发送给 IPFS 后端。

目前 *.bit.v2ex.pro 的完整 NGINX 配置:

upstream bit_gateway_backend {
    server 127.0.0.1:8080;
    keepalive 4;
}

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

    include /etc/nginx/ssl/bit.v2ex.pro.conf;

    server_name bit.v2ex.pro;
    server_name *.bit.v2ex.pro;
    access_log /var/log/nginx/bit.v2ex.pro.log;

    location / {
        set_by_lua_block $bit {
                local http_host = ngx.var.http_host
                local bit_domain, err = ngx.re.match(http_host, "([a-zA-Z0-9-]+\\.bit)(\\.v2ex\\.pro)")
                if bit_domain then
                    return bit_domain[1]
                else
                    return nil
                end
        }
        set $cache_key $scheme$bit$uri$is_args$args;
        proxy_cache_key $cache_key;
        proxy_pass_header Server;
        proxy_http_version 1.1;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header Via "Planetable";
        proxy_set_header Host $bit;

        proxy_cache_revalidate on;
        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
        proxy_cache_valid 200 60s;
        proxy_cache_background_update on;

        proxy_cache awesome;

        add_header CDN-Cache-Control "public, max-age=60, stale-while-revalidate=8640000";
        add_header Cache-Control "public, max-age=600, stale-while-revalidate=8640000";

        proxy_pass http://bit_gateway_backend;
    }
}

IPFS (Kubo)

至少需要 100G 存储空间。同时 IPFS 对内存的需求很大,所以跑 IPFS 的服务器至少需要 16G 的内存。

配置中在 DNS.Resolver 中这样加入对 .bit 域名的支持:

Screenshot 2023-06-02 at 3.48.29 AM

NGINX 和 IPFS 可以跑在一台服务器上。

.ipfs/config 中另外需要注意的是 IPNS 相关的两条配置:

  • 打开 IPNS Pubsub 支持
  • 增加 IPNS 的 ResolveCacheSize,可以把这个数量设置为活跃 DWeb 用户的 2 倍
Screenshot 2023-06-02 at 3.59.04 AM

DWeb DNS

上面截图中提到的 DoH 服务器,一个用 Python Flask 实现的 .bit DoH 服务器:

https://github.com/v2ex/dweb-dns

DAS Indexer

.bit 的账号信息 API,用于查询一个 .bit 是否设定了任何 DWeb 记录。

https://github.com/dotbitHQ/das-account-indexer