Skip to content

自建解析服务器

LoveSy edited this page Jan 3, 2021 · 10 revisions

前言

由于biliplus停止解析,哔哩漫游插件需要自定义解析服务器才可正常工作。解析服务器仅用于请求播放地址,因而无需高流量高带宽服务器。

技术细节

  • 对于港澳台、中国大陆番剧,会从/pgc/player/api/playurl获取播放地址,反代上有应为api.bilibili.com
  • 对于泰国、东南亚番剧,会从/intl/gateway/v2/ogv/playurl获取播放地址,反代域名应为api.global.bilibili.com;从/intl/gateway/v2/app/subtitle获取字幕,反代上游应为app.global.bilibili.com(注意跟播放地址的上游不一样);从/intl/gateway/v2/app/search/type获取搜索结果
  • 解析服务器必须有域名(可以自己获取免费二级域名),并且必须使用https(可以使用acme.sh+80端口免费申请),以防止中间人攻击
  • 不同区域可以用不同三级或以上域名区分,也可以检查URI中area参数,目前有的参数为:cn中国大陆;hk香港tw台湾th泰国、东南亚
  • 如果你的ip使用量大,b站会暂时封禁该ip,这时候应该加入解析结果缓存、限制单个用户(检查access_key)请求次数等
  • 漫游带有http_x_from_biliroaming的头,头内容会带上漫游版本,可以检查该头防止滥用,未来还能用于版本检查以解决可能会有的兼容问题

港澳台、中国大陆番剧反代参考

用nginx反代实现,参考配置如下:

server
{
    server_name bili.example.com;  # 设置域名为bili.example

    listen 443 ssl http2;          # 务必使用https,如有需要也可以同时监听ipv6

    client_max_body_size 128M;

    location /pgc/player/api/playurl {  # 只反向代理该路径的请求
      proxy_pass https://api.bilibili.com;  # 转发到b站服务器
      if ($http_x_from_biliroaming ~ "^$") {  # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
        return 403;
      }
    }

    # RSA certificate
    ssl_certificate     /etc/nginx/ssl/example.com/full.pem;  # 证书路径
    ssl_certificate_key /etc/nginx/ssl/example.com/key.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
}

泰国、东南亚番剧反代参考

用nginx反代实现,参考配置如下(注意反代字幕接口不然没有字幕):

server
{
    server_name bili.example.com;  # 设置域名为bili.example

    listen 443 ssl http2;          # 务必使用https,如有需要也可以同时监听ipv6

    client_max_body_size 128M;

    location /intl/gateway/v2/ogv/playurl {  # 只反向代理该路径的请求
      proxy_pass https://api.global.bilibili.com;  # 转发到b站服务器
      if ($http_x_from_biliroaming ~ "^$") {  # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
        return 403;
      }
    }

    location /intl/gateway/v2/app/subtitle {  # 还有字幕请求
      proxy_pass https://app.global.bilibili.com;  # 转发到b站服务器,注意跟播放地址上游不一样
      if ($http_x_from_biliroaming ~ "^$") {  # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
        return 403;
      }
    }
    location /intl/gateway/v2/app/search/type {  # 还有搜索请求
      proxy_pass https://app.global.bilibili.com;  # 转发到b站服务器,注意跟播放地址上游不一样
      if ($http_x_from_biliroaming ~ "^$") {  # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
        return 403;
      }
    }
    # RSA certificate
    ssl_certificate     /etc/nginx/ssl/example.com/full.pem;  # 证书路径
    ssl_certificate_key /etc/nginx/ssl/example.com/key.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
}

Clone this wiki locally