我觉得这个作者的语言表达能力很有问题,然后带着一大批用户一起跟他语焉不详(
Prerequisites
Shadowrocket
一个自己的域名
一台 VPS
正文
由于 iOS 在请求第三方音源的时候,会默认使用 https 而非 http 做请求[1],因此需要使用 -e 参数是定 endpoint。然后因为一些我也搞不清(也没人写)的原因(大概是 UnblockNeteaseMusic 使用了 MITM?),在使用 endpoint 参数的时候,要么安装作者提供的描述文件,要么需要自己签发证书。
假如不想安装描述文件,按照如下几个步骤操作:
- 开启 UnblockNeteaseMusic 并监听公网端口
node path/to/UnblockNeteaseMusic/app.js -p <PORT> -o kuwo qq xiami migu -a 0.0.0.0 -e https://<YOUR_DOMAIN>
-o 参数的顺序可以自行选择,注意这里不能开启 -s,否则 Windows 客户端无法正常登录(我觉得是白名单的问题)
- 创建 nginx vhost,签发 Let’s Encrypt 证书,并修改配置文件
如果使用 oneinstack 这样的一键包,直接创建一个 vhost 然后去改配置文件即可,改好的配置文件长这样
server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate <YOUR_CRT_FILE>; ssl_certificate_key <YOUR_KEY_FILE>; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_buffer_size 1400; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; server_name <YOUR_DOMAIN>; access_log <YOUR_LOG_FILE> combined; index index.html index.htm index.php; root <PATH_TO_YOUR_ROOT_DIR>; if ($ssl_protocol = "") { return 301 https://$host$request_uri; } location /.well-known { } location /shadowrocket-netease-rules.conf { } location / { proxy_pass http://localhost:<PORT>; } }
这里第一个 location 是为了方便 acme.sh 签发证书做域名校验;
第二个是可以在同一个域名下放入 Shadowrocket 的配置文件,然后直接订阅,我自己的配置文件放在这里(参考了 lolico.me 的配置)
第三个是为了把所有对这个域名的请求转发到 UnblockNeteaseMusic 的本体[2],但是根据我的测试来看,似乎一点用都没有。在设置了代理之后,所有的请求是以 HTTP CONNECT 的方式发出的,所以需要的是 forward proxy 而非这里的 reverse proxy。但是在这个场景下,我们需要的只是类似于端口转发的操作,nginx 并没法支持这样的行为,所以实在是弄不懂为什么要这样写。
- 安装 Shadowrocket 并且添加一个节点做 HTTP 代理,只需要填写服务器域名和代理程序本体监听的端口就可以了,不要写入 443 或者 80 这些 nginx 监听的端口
所以到头来,需要多终端多网络环境使用,且终端没有条件跑这个脚本的情况下,似乎无论如何都要把这个代理程序本体放在公网上。