通过subdomain.yourdomain.com访问YouTube可解决YouTube被墙的困扰,而且可以从国内直连访问,只要VPS不被GFW发现即可。这里用到的是zmirror和Nginx。zmirror官方用的是Apache,我是个nginx控,所以这里写下用Nginx搞出来的过程。
准备工作
- 首先,你需要一台不需要通过谷歌reCaptcha的VPS(虚拟化方式不限)或者独立服务器。像OVH这样的IP就没法反代谷歌的服务了。也不要去使用IP名声比较差的,比如任意发垃圾邮件的那种IP,被谷歌封锁的几率很大。
- 其次,zmirror跑在Flask上,作者选择使用Python 3的语法来写程序所以需要一个原生支持Python 3的操作系统比较方便,虽然你也可以自己安装Python 3,这里就不再撰述。我这里用的是Fedora 27作为例子。
- 关闭SELinux(不然自己调),防火墙开启80和443端口这些就不再说了,基本的运维。
- 以下过程均在root下执行。
- 子域名必须已经解析到服务器IP上。
安装过程
安装依赖
dnf groupinstall "C Development Tools and Libraries" -y dnf install git supervisor python3-flask python3-pip python3-requests openssl-devel python3-devel nginx libxml2-devel python3-fastcache certbot -y
安装pip组件依赖
pip3 install cchardet uwsgi -U
(可选)补充PATH,可补充到.bashrc下,也可以直接输入此命令。
export PATH=$PATH:/usr/local/bin
获取TLS证书
certbot certonly --agree-tos -t --standalone -d subdomain.yourdomain.com
请自行替换域名。
获取好的证书会保存在/etc/letsencrypt/live/subdomain.yourdomain.com/
下,其实也就是几个软连接。
修改Nginx主配置文件
在/etc/nginx/nginx.conf
里找到下面这行从2048改为4096,不然nginx会报警告。
types_hash_max_size 4096;
生成dhparams.pem
在/etc/nginx
下创建ssl文件夹,在这个文件夹下输入以下命令生成一个全新的、安全的dhparam。
openssl dhparam -out dhparams.pem 2048
此命令需要等一会儿才能执行完成。
写Nginx域名配置
upstream flask { server unix:///var/www/zmirror/ytb.sock; } server { listen 80; listen [::]:80; server_name subdomain.yourdomain.com; rewrite ^ https://$http_host$request_uri? redirect; access_log off; error_log off; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name subdomain.yourdomain.com; gzip_vary on; ssl_certificate /etc/letsencrypt/live/subdomain.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/subdomain.yourdomain.com/privkey.pem; ssl_session_cache shared:SSL:50m; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA EECDH EDH+aRSA 3DES AES128+EECDH AES128+EDH !aNULL !eNULL !LOW !MD5 !EXP !PSK !SRP !DSS !RC4 !DHE"; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=3153600;"; ssl_dhparam /etc/nginx/ssl/dhparams.pem; location / { uwsgi_pass flask; include /etc/nginx/uwsgi_params; uwsgi_read_timeout 30; } }
安装并配置zmirror
在/var/www
下执行以下命令
git clone https://github.com/aploium/zmirror.git
进入zmirror后复制配置文件到主文件夹
cd zmirror cp more_configs/config_youtube.py config.py cp more_configs/custom_func_youtube.py custom_func.py
根据你的实际情况修改config.py,主要是my_host_name和my_host_scheme。其他可保留。
如果你要玩视频分发集群,则需要修改custom_func.py文件,请根据注释修改。
最后修改权限:
chown -R nginx:nginx /var/www
配置supervisor vassal
创建/etc/uwsgi/vassals
文件夹,并在下创建一个uwsgi.ini
文件,内容如下:
[uwsgi] project = zmirror chdir = /var/www/zmirror socket = /var/www/zmirror/ytb.sock chmod-socket = 644 master = true processes = 10 vacuum = true module = wsgi enable-threads = true
配置supervisor
我们需要supervisor来跑uwsgi的emperor模式,此模式可自动监测vassals文件夹并自动导入新配置,反激活无效配置。在/etc/supervisord.d
下创建uwsgi.ini
,内容如下:
[program:uwsgi] command=/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid nginx --gid nginx process_name=%(program_name)s autostart=true autorestart=true numprocs=1 user=root stopsignal=INT stdout_logfile=/var/log/uwsgi.log stdout_logfile_maxbytes=50MB redirect_stderr=true
启用nginx和supervisord
systemctl start supervisord nginx systemctl enable supervisord nginx
现在访问subdomain.yourdomain.com即可访问YouTube并可看其视频。
(可选)网络优化
可上BBR / net-speeder等配置、软件加速网站和视频的速度。