[仅供会员]Zmirror配Nginx搭建自己的YouTube反向代理

通过subdomain.yourdomain.com访问YouTube可解决YouTube被墙的困扰,而且可以从国内直连访问,只要VPS不被GFW发现即可。这里用到的是zmirror和Nginx。zmirror官方用的是Apache,我是个nginx控,所以这里写下用Nginx搞出来的过程。

准备工作

  1. 首先,你需要一台不需要通过谷歌reCaptcha的VPS(虚拟化方式不限)或者独立服务器。像OVH这样的IP就没法反代谷歌的服务了。也不要去使用IP名声比较差的,比如任意发垃圾邮件的那种IP,被谷歌封锁的几率很大。
  2. 其次,zmirror跑在Flask上,作者选择使用Python 3的语法来写程序所以需要一个原生支持Python 3的操作系统比较方便,虽然你也可以自己安装Python 3,这里就不再撰述。我这里用的是Fedora 27作为例子。
  3. 关闭SELinux(不然自己调),防火墙开启80和443端口这些就不再说了,基本的运维。
  4. 以下过程均在root下执行。
  5. 子域名必须已经解析到服务器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等配置、软件加速网站和视频的速度。

作者:小老外

我还需要不断地学习。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据