Nginx通过http_header分流Websocket

2017-10-20

Nginx 转发 Websocket

今天介绍两种通过http_header分流某V姓软件的Websocket协议的方法:

通过定义两个server分流

只需要在原来配置文件的基础上在底部再添加一个server块,同样监听在443端口,同样地,也共用前者的证书来认证,第一处不同就是在第二者的server块内的server_name处填写自定义的Host值,通过此值来分流;第二处不同就是需要将传入到后端的数据的Host值改回正常值,以保证连接成功。

server{
       listen  443;
       server_name     "伪装域名";
        ssl on;
        ssl_certificate       /etc/v2ray/v2ray.crt;
        ssl_certificate_key   /etc/v2ray/v2ray.key;
        ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;

        location / {
                proxy_redirect  off;
                proxy_pass      http://127.0.0.10000;
                proxy_http_version      1.1;
                proxy_set_header        Upgrade $http_upgrade;
                proxy_set_header        Connection "upgrade";
                proxy_set_header        Host    "真实域名";
                proxy_intercept_errors  on;
                limit_rate      0;
        }
}

通过条件语句进行分流

这种方式比上一种要更加灵活,上一种方式不仅需要手动填入用于伪装的server_name,客户端只要填入非域名的任何域名都可以被分流;对配置文件的改动也是最小的。

location / {
       if ( $http_host != $server_name ){
               proxy_pass      http://127.0.0.1:10000;
                }

               proxy_redirect  off;
               proxy_http_version      1.1;
               proxy_set_header        Upgrade $http_upgrade;
               proxy_set_header        Connection "upgrade";
               proxy_set_header        Host    $server_name;

        root /data/www;
        index index.html;
        }

linux

树莓派安装adbyby去除广告

树莓派启用看门狗

comments powered by Disqus