通过Nginx的端口转发提高加速器效率

Published: Tags: NGINX

首先澄清一个大部分人对端口转发影响加速器效率的误解,这部分朋友会认为增加了一个节点会降低速率,但事实却往往不是想象。 我们都知道数据包从A点到B点是要经过N层网关的,那么如果我们人为的选择一个适当的中转节点,就相当于走了更好的路由线路。

笔者近期遇到一个情况,本地直连香港再连国外,测速统计下行30K而上行却有20M带宽,其中缘由就当是运营商的国际线路拥挤吧。 所以考虑再三,只能在国内云上增加一个中转服务器了,毕竟阿里腾讯这样的大厂,国际线路都是优化过的,高质量的BGP和CN2哈。 附注:增加中转服务器啥都好,缺点就是费钱;另外CN2和BGP不是同类东西,有兴趣的朋友可以自查,香港机房有专线,速度飞快。

可以通过nginx、haproxy、iptables、firewalld、socat等方式进行端口转发,笔者最熟悉的就是Nginx了,而且负载均衡也简单。 至于其他几个,haproxy不支持UDP转发,iptables配置略为繁杂,firewalld比较少用到,至于socat的话笔者孤陋寡闻就不考虑了。

以下是Nginx的配置,需要放在http同层而不是内层,因为stream并非http协议(留意下文注释说明)

user nginx;
worker_processes auto;

#如果报错没有stream指令,开头加上这行
#load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

events {
    use epoll;
    worker_connections 30000;
}

#【端口转发,开始配置】
stream {
    upstream helloworld {
        ip_hash;
        server 1.3.5.7:2468;
        server 2.4.6.8:1357;
    }
    server {
        listen 8080;
        listen 8080 udp;
        proxy_pass helloworld;
    }
    #上方负载均衡,下方单个机器,二选其一即可
    server {
        listen 10443;
        listen 10443 udp;
        proxy_pass 123.45.67.89:49152;
    }
}
#【端口转发,结束配置】

http {
    include      /etc/nginx/mime.types;
    default_type application/octet-stream;
    server {
        listen      80;
        server_name localhost;
        root /data/web/website;
    }
}