准备条件

  1. vps(我测试用的是vultr centos7)
  2. 域名+证书(免流的话需要备案的域名)
  3. 腾讯云cdn
  4. v2ray+websocket+tls+nginx+cdn
  5. 把域名解析到服务器IP

搭建nginx

Debian系统

apt install nginx

Centos7系统,用的这个搭建脚本

wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh && bash nginx.sh

安装完成后执行命令

source /etc/profile

让环境变量立即生效,或重新打开终端。
重装命令:./nginx.sh (在/root目录下)
参考文章

搭建v2ray(官方一键)

bash <(curl -L -s https://install.direct/go.sh)

重启:service v2ray restart
状态:service v2ray status
搭建好了v2ray发现启动不了

  1. 服务器时间校准,比如你的服务器是aws美国的,但是你在中国使用v2ray,这样就会导致二者时间不一致,所以我们需要修改服务器的时间。(明明启动了,配置也没问题,可能就是忘记做这一步了,血与泪的教训)
  2. 查看端口是否打开、uuid是否一致、path路径是否一致
    查看时间 date -R
    修改时间 sudo date --set="2019-05-31 16:16:23"

修改nginx和v2ray配置

服务器 V2Ray 配置(官方贴出来的配置有问题,这个是我成功的)

{
  "log" : {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "info"
  },
  "inbound": {
    "port": 10000, //自己随便改,不冲突就可以了
    "listen": "127.0.0.1",
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "68b0fb83-4574-4204-8856-64c248715c97",
          "level": 1,
          "alterId": 10,
          "security": "none"
        }
      ]
    },
    "streamSettings": {
      "network": "ws",
      "security": "auto",
      "wsSettings": {
        "path": "/"
      }
    }
  },
  "outbound": {
    "protocol": "freedom",
    "settings": {}
  }
}

Nginx配置的反代配置(官方贴出来的配置有问题,下面是我成功的)
直接在/usr/local/nginx/conf/cdn里面新建一个*.conf配置
Ps:默认配置文件中这一句include cdn/*.conf;
意思是默认配置加上该路径里面的配置,可以不用直接修改默认配置达到修改配置的目的
默认配置中的这段可删或者不删除(目前不确定对协议免流是否有影响)不会对协议免流有影响

server {
        listen       80;
        server_name  localhost;
        ...
        ..
        }
server {
  listen  443 ssl;
  server_name           mydomain.me;
  ssl_certificate       /etc/v2ray/v2ray.crt;#证书的路径
  ssl_certificate_key   /etc/v2ray/v2ray.key;#证书的路径
  ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers           HIGH:!aNULL:!MD5;

        location / { # 与 V2Ray 配置中的 path 保持一致
        proxy_redirect off;
        proxy_pass http://127.0.0.1:10000;#假设WebSocket监听在环回地址的10000端口上
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

       # Show realip in v2ray access.log
        proxy_set_header X-Real-IP $remote_addr;
      # proxy_set_header Host $host; 这句和上面proxy_set_header Host $http_host;重复了,所以要注销掉,官网配置是没有注销的
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

然后访问您的域名,出现Bad Request说明成功v2ray+ws+tls+nginx就成功了

配置腾讯云CDN

  1. 打开腾讯云的官网,CDN,添加域名,源站填写IP,需要注意的是,加速类型选择流媒体点播加速
  2. 再然后点击高级配置,添加Https。申请证书或者上传证书,回源记得选择协议跟随
    PS:我是打开了强制https,也能免流,影响有待考究,测试无论打不打开都可以免
  3. 然后访问控制-把过滤参数关闭,缓存配置-全部改成0秒-关闭Range回源
  4. 再去域名解析商,修改A解析删掉,重新添加CNAME记录,记录值CDN那里会给
  5. 最后查询一下域名,出现腾讯cdn域名说明成功!

客户端配置

自己在客户端设置就好
地址填写域名
端口443
传输协议ws
伪装类型none
伪装域名一定要填写服务器域名
额外ID和path一定要和服务器端的一致
打开tls,默认为ture

PS搭建过程出现的问题

  1. 查看开放端口,v2ray内部转发的端口也是可以看到
  2. 部署CDN之前,先试一下v2ray能不能连上,记得同步时间
  3. 如果成功了,输入https://域名 ,会看到提示Bsd Rquest,而不是nginx的首页
  4. 关键在于v2ray和nginx的配置

参考文章

WebSocket+TLS+Web