nondanee / UnblockNeteaseMusic

Revive unavailable songs for Netease Cloud Music
MIT License
17.4k stars 2.51k forks source link

如何通过Host的方式将443转发给80端口? #319

Closed a95788 closed 4 years ago

a95788 commented 4 years ago

我是纯小白一名,之前成功弄过v2ray部署 这次用的脚本是https://github.com/XIU2/SHELL/blob/master/docs/unblock163.md 端口设置如下: O)ZQCFF`G7EY{Z UA~VB9B6

昨天提问的issues #318 中提到,后来想通过Host的方式解决问题。 目前证书(自签)、域名已有,也在Nginx中配置了文件。 目前只有PC端生效(就算不申请SSL也能够直接生效)

user  www www;
worker_processes auto;
error_log  /www/wwwlogs/nginx_error.log  crit;
pid        /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

http
    {
        include       mime.types;
        #include luawaf.conf;

        include proxy.conf;

        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
        fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

server {
  listen 443;
  server_name *

  ssl on;
  ssl_certificate *.crt;
  ssl_certificate_key *.key; 
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;

  location / {
    proxy_pass http://*:80; 
  }
}
}

但似乎不起效果。

目前从日志来看能够匹配到音乐,但在IOS端就是不能播放,提示“网络不给力,无法继续播放” 我猜测应该是没有443转发到80端口。 IMG_2003 播放器效果 1574509126(1)

我阅读了closed的issues和Readme文档,实在是不知道如何使用80端口。 不知道作者能不能将命令完整的说明一下。

nondanee commented 4 years ago

目前从日志来看能够匹配到音乐,但在IOS端就是不能播放,提示“网络不给力,无法继续播放” 我猜测应该是没有443转发到80端口。

我看你 unblockneteasemusic 开了 443,nginx 也开了 443 那么你说的这个是 nginx 的 443 还是 unblockneteasemusic 的 443? 两个都开应该应该有一个没法正常启动的吧

iOS 这个问题有说明 https://github.com/nondanee/UnblockNeteaseMusic/issues/56#issue-437081303 一共两种方法,二选一,都可以在 #65 中找到


实在是不知道如何使用80端口。

结合你的配置信息和你的 log 来看你其实一直都在用 80 端口啊 如果有流量通过 443(https) 端口 log 会显示 MITM > music.163.com (ssl)


不知道作者能不能将命令完整的说明一下。

确实比较分散,使用相对简单的在 #22 有说明,还有部分在 #56 #65 #48 中结合实际作用说明 所有的命令用 -h 可以看到,README 里有列出 具体什么意思怎么用直接看教程即可 我把所有 option 都解释一遍然后有一半你都用不到我不是白辛苦了 而且你都用脚本启动了,应该用不到命令啊,脚本都有提示的吧?

a95788 commented 4 years ago

@nondanee 目前站点还没有备案,域名和服务器都是腾讯云的,现在正在被腾讯云阻断了,但域名能够正确解析到公网IP 我试着手动进入脚本安装的目录 /var/www/UnblockNeteaseMusic/ 然后手动启动 node app.js -s -e https://<转发音源的域名> -p 80 这样的话可以播放音乐,但部分音乐仍然不能播放,尤其是解析到非QQ的音源 (Log依然是 不带SSL或者443字样的)

同时,如果我的启动命令是 node app.js -s -e https://<转发音源的域名> -p 80:443 则会提示443端口被占用 L42E@SSD1V}CH H(0B O65X 通过查看端口占用情况,是Nginx正在占用443端口

现在我也不知道应该要怎么去进行443转发到80端口了。

附上最新修改的Nginx

server { listen 443 ; server_name 我自己注册的域名

ssl on; ssl_certificate /www/SSL/1.crt; ssl_certificate_key /www/SSL/2.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on;

location / { proxypass http://0.0.0.0:80; } } }

如果KILL掉NGINX 然后在NODE APP.JS中加入 80:443的话能够成功运行,但一旦再运行NGINX就会杀掉NODE 。 在NODE独立运行后再运行nginx后的NGINX日志 ~}1M}K3~D WP9G3 28R(P(D

a95788 commented 4 years ago

如果通过小火箭使用,就可以成功播放。。但是这有点不太符合预期 而且TUNNEL并不是443或者SSL 还有 在添加了规则之后 代理模式必须选择 全局才可以播放,如果选择配置(我的小火箭有绕国内的PAC) 因此还是希望能够修改HOST文件达到效果,该怎么实现? Z3X4Z56RF2U4Y3M}JX PXCY

a95788 commented 4 years ago

当我关掉Nginx后,似乎也不影响音源的转发呀。音乐照样能听,就很奇怪了呀。

nondanee commented 4 years ago

@a95788

目前站点还没有备案,域名和服务器都是腾讯云的,现在正在被腾讯云阻断了,但域名能够正确解析到公网IP 我试着手动进入脚本安装的目录 /var/www/UnblockNeteaseMusic/ 然后手动启动 node app.js -s -e https://<转发音源的域名> -p 80 这样的话可以播放音乐,但部分音乐仍然不能播放,尤其是解析到非QQ的音源 (Log依然是 不带SSL或者443字样的)

域名被阻断了就没法转发了,这种方式你可以放弃了 也就是说QQ的音源可以播放?应该不能吧,你域名都连不通


但一旦再运行NGINX就会杀掉NODE

不可能吧, nginx 还有权限杀掉已经启动的 node?


同时,如果我的启动命令是 node app.js -s -e https://<转发音源的域名> -p 80:443 则会提示443端口被占用

都是 443 端口,nginx 和 unblockneteasemusic 两个之中肯定有一个没法启动啊

为什么已经开启了 https 监听 ( -p 80:443 ) 后还要再用 nginx 转发呢?直接 -e https://music.163.com

65 你没看吗?两种方法二选一啊,二选一啊,二选一啊,哪里有说一定要用 nginx 的?

a95788 commented 4 years ago

65 你没看吗?两种方法二选一啊,二选一啊,二选一啊,哪里有说一定要用 nginx 的?

原来是这样,那证书的话我要怎么指定?我已经覆盖了文件夹里面的key和crt证书。 这样还需要进行指定吗?其实我没理解的是,我现在用的是Host文件直接解析到我的服务器上,Host只能填写IP,可是SSL我的认知是,必须要有域名才能进行443请求吧? 如果是直接用NODE运行的话,-e https://<转发的音源> 这个功能的作用是什么? 那我自签的证书还需要吗?同时 这个<转发的音源>到底应该是填写 我自己申请的域名还是https://music.163.com

目前站点还没有备案,域名和服务器都是腾讯云的,现在正在被腾讯云阻断了,但域名能够正确解析到公网IP 我试着手动进入脚本安装的目录 /var/www/UnblockNeteaseMusic/ 然后手动启动 node app.js -s -e https://<转发音源的域名> -p 80 这样的话可以播放音乐,但部分音乐仍然不能播放,尤其是解析到非QQ的音源 (Log依然是 不带SSL或者443字样的)

域名被阻断了就没法转发了,这种方式你可以放弃了 也就是说QQ的音源可以播放?应该不能吧,你域名都连不通

那如果我申请了备案后 是不是就可以生效音源转发了? 我现在的主要是,443的请求没法转发到80上。

但一旦再运行NGINX就会杀掉NODE

但确实是杀掉了,在SSH上面看得到。当然了Nginx是通过宝塔面板启动的。

nondanee commented 4 years ago

原来是这样,那证书的话我要怎么指定?我已经覆盖了文件夹里面的key和crt证书。 这样还需要进行指定吗?

不知道你说的指定证书是什么意思,是指定 endpoint 的意思吗?

其实我没理解的是,我现在用的是Host文件直接解析到我的服务器上,Host只能填写IP,可是SSL我的认知是,必须要有域名才能进行443请求吧?

是的必须有域名才能进行443请求,但是你改了 hosts,域名就是 music.163.com 啊 (效果就相当于你拥有 music.163.com 域名,并把 music.163.com 解析到你的服务器 IP,客户端直接请求你的服务器)

如果是直接用NODE运行的话,-e https://<转发的音源> 这个功能的作用是什么?

endpoint 的作用是转发音源地址,只负责歌曲链接转发,可以去看 #143

那我自签的证书还需要吗?

你能保证 -e 的地址是公网可访问的可信任的 https 站点且有 /package 功能,就不需要自签证书,二选一。但是你现在域名没备案公网访问不了

那如果我申请了备案后 是不是就可以生效音源转发了? 我现在的主要是,443的请求没法转发到80上。

是的。

你说的转发是反向代理的意思?为什么说 443 请求没法转发到 80 上?你不是已经配置了 proxy_pass 的反向代理吗?肯定可以转发啊!

你又改不了客户端的代码,客户端发起请求的地址还是 music.163.com,又不会请求你的域名


-p 80:443 -e https://music.163.com 这样 unblockneteasemusic 会自动开启 http 和 https 端口,https 的端口用的证书是我或者你自己签的 music.163.com 的假证书,所以要在系统安装 CA 来手动信任这张假证书。客户端的请求因为你改了 hosts 的原因会来请求 unblockneteasemusic 的 80 和 443 端口,填充的播放地址是用 music.163.com 构造的假地址。因为改了 hosts,这个播放地址也会解析到 unblockneteasemusic 并请求 443 端口,然后按内部逻辑处理后返回,这种情况下跟你自己的域名没有半毛钱关系

如果用 -e 你自己的域名,填充的播放地址会以你自己的域名开头,然后客户端会按正常的 dns 解析访问你这个域名的 server,所以要保证你的域名公网可以访问,并且证书是系统默认信任的证书。教程里说要配置 nginx 反向代理到 unblockneteasemusic 端口上是因为要用到 unblockneteasemusic 的内部逻辑。当然你可以自己实现那个逻辑,另外开一个 server,不使用 unblockneteasemusic 端口

a95788 commented 4 years ago

@nondanee 现在的情况是,PC上的客户端可以通过代理的方式,成功播放部分歌曲,但iOS上通过Host模式无法播放的音乐,在PC上也不行,只有在iOS上使用小火箭播放才能成功,具体音乐有 周杰伦的 “不爱我拉倒”。 此时的Log输出是 Tunnel:部分126.net的域名,部分我自己的域名:443 而不是SSL 1

再谈谈我的服务器(腾讯云)目前的情况,如上所述,暂无备案。有域名和自签证书。 ping 我的域名 是能够正确解析到我的服务器的公网IP,通过公网ip直接访问服务器的80端口和443端口也是可以的。 一旦通过浏览器访问我的域名,直接强制跳转到dnspod(域名注册商)的要求备案页中。 这样情况下,是我的配置出了问题,还是确实是需要备案?

nondanee commented 4 years ago

用最新的 Windows 客户端 hosts 失效的话可以用之前的版本 https://github.com/nondanee/UnblockNeteaseMusic/issues/48#issuecomment-554661621 (我测了下,第一次打开没有效果,用过一次代理以后再改 hosts 会生效)

iOS 怎么改 hosts?越狱了改? iOS 上系统代理不可用吗,只能用小火箭?

无法 mitm 的流量会走 tunnel,不显示 ssl 你说的自签证书应该是 let's encrypt 这类免费的 ssl 证书吧,那是受信任的 CA 签的,不是 "自签" 的

确实需要备案 说过了啊不用域名也可以,不用执着域名的问题

a95788 commented 4 years ago

用最新的 Windows 客户端 hosts 失效的话可以用之前的版本 #48 (comment) (我测了下,第一次打开没有效果,用过一次代理以后再改 hosts 会生效)

目前我的最新网易客户端仍然可使用内置的代理形式播放,但部分音乐不起效果。

iOS 怎么改 hosts?越狱了改?

对,就是通过越狱后修改Hosts。

iOS 上系统代理不可用吗,只能用小火箭?

系统的代理,因为考虑到4G和WIFI都能够生效,加上我自己购买了小火箭,就没有考虑到用系统的代理。

无法 mitm 的流量会走 tunnel,不显示 ssl 你说的自签证书应该是 let's encrypt 这类免费的 ssl 证书吧,那是受信任的 CA 签的,不是 "自签" 的

nondanee commented 4 years ago

@a95788 那应该是没匹配到

越狱后改 hosts 我没测过

那就用小火箭好了

客户端如果直接访问网易服务器 ip 的话你改 hosts 不会生效的