跳至主要内容

阿里云通过Nginx中转Linode/digitalocean/AWS的V2ray协议,实现负载均衡

开篇文的废话.原因是Sandy做站服务器太多了,发现利用率不高,皮又痒了又想折腾了.v2ray是利器但是给人的感觉就是只能用一台服务器,官方也说不支持负载均衡,不会A服务器挂机,自动跳转到B服务器.这里就有点折磨人了.每个服务器挂了都要自己去改配置文件.

我们访问国外的服务器,如果没CN2的线路是非常慢的,起码不快!哈哈~现在VPS都便宜起码人手一个人有5台以上吧?这样的话我们就可以开整.

开整条件:国内VPS或者阿里云有CN2线路的机器最好是100MB-200MB的带宽的.保证你爽歪歪.但是Sandy在阿里云HK30MB下也测试了也可以达到30000KB以上,羡慕吧~我们可以开始了!

老规则工具先出:

没被gwf和谐的服务器1台(下文统称:主服务器)

国外服务器2台以上(下文统称:从服务器)

nginx 1.9.5版本以上(推荐:lnmp1.4)

v2ray croe

第一步:

主服务器安装lnmp1.4,这里就不细说教程了.直接去官方看教程

安装完毕以后我们来升级Nginx让他支持stream模块

cd lnmp1.4
vi lnmp.conf

在Nginx_Modules_Options=‘’里面加入--with-stream

Nginx_Modules_Options='--with-stream’

然后执行升级命令

./upgrade.sh nginx

 第二步

修改nginx.conf文件

cd /usr/local/nginx/conf/nginx.conf

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

下面加入

stream{
    server{
        listen 0.0.0.0:8080;
        proxy_pass v2ray_backend;
        proxy_timeout 10m;
        proxy_connect_timeout 5000ms;       
    }
    upstream v2ray_backend{
          server  192.168.2.2:8888      max_fails=3 fail_timeout=30s    weight=1;
          server  192.168.2.3:8888      max_fails=3 fail_timeout=30s    weight=1;
          server  192.168.2.4:8888      max_fails=3 fail_timeout=30s    weight=1;
    }
}

server里面的ip是你的被中转服务器

主要配置参数的解释

负载均衡主要的功能都在stream块中

负载均衡方式介绍

Nginx 支持三种负载均衡的方式:Round Robin(简单轮询),Least Connections(最少连接) 和 Least Time(最少时间)

· Round Robin 是默认的方式,不需要在配置文件中特意写出来,可根据权重在后端服务器中依次选择

· Least Connections 最少连接,Nginx 会选择当前活动连接数最少的服务器进行连接,设置如下:

upstream stream_backend {
    least_conn;
    server backend1.example.com:12345;
    server backend2.example.com:12345;
    server backend3.example.com:12346;
}

· Least Time 最少时间,这个是收费版才有的功能,可以选择当前平均延迟低并且活动连接最少的服务器。因为是收费功能所以不再赘述。

其他主要的配置介绍

proxy_timeout 10m

proxy_timeout表示成功与后端建立连接后的超时时间,一旦超过这个时间没有数据传送连接就会关闭。这里设置为10分钟

proxy_connect_timeout 5m

proxy_connect_timeout表示Nginx与后端服务器连接所需的延迟,根据 Nginx 所在的机器和后端服务器的延迟来设置。当然也可以设置的大一些,来容纳一些小幅度的网络波动

max_fails=3 fail_timeout=30s

这个就是被动检测的设置项了,它的意思是在30秒内如果连接失败或者超时3次,那么该服务器就被忽略30秒。看起来的确有些不智能,但是实测下来还是可以接受的。主动检测和 Haproxy 很相似,但是这个功能是付费版才有,在此不做讨论。

 

weight=1

和 Haproxy 相似,这个是权重的意思,不赘述。

第三步

在从服务器端按照v2ray

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

然后调整配置 ,这里我们要注意id和network要一样,而且只支持TCP模式

cd /etc/v2ray/config.json

把端口修改成主服务器设置的端口,v2ray的id要全部服务器一样,否则就不能连接其他点了!

修改完毕以后我们重新启动v2ray服务

service v2ray restart

这样就搞定了.

 

 

评论

  1. 你好,想咨询一下 - lnmp可以只选择nginx吗?

    还是说全部都得装?

    回复删除
  2. 虽然可以, 但是这样是不是 阿里云到v2ray的流量是不加密的?

    回复删除

发表评论

此博客中的热门博文

利用haproxy来做V2RAY负载均衡

Sandy在之前有说过 阿里云通过Nginx中转Linode/digitalocean/AWS的V2ray协议,实现负载均衡 ,有些学童不想折腾nginx,那么我们可以用haproxy来折腾,不管是haproxy还是Nginx都可以在树莓派和局域网的PC机器折腾! 安装haproxy的教程就移步到-> haproxy安装教程 apt-get install haproxy 安装完毕,我们来修改haproxy的配置 vi /etc/haproxy/haproxy.cfg 里面内容全部删除,加入下面的内容 global ulimit-n 51200 log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy pidfile /var/run/haproxy.pid user haproxy group haproxy daemon defaults log global mode tcp retries 3 option dontlognull option redispatch #上游TCP服务器连接等待时间 timeout connect 5s timeout client 24h timeout server 24h #以下为Web管理页面设置,如不需要可以删除 listen admin_stats bind 0.0.0.0:8888 mode http log 127.0.0.1 local0 err stats refresh 30s stats uri /haproxy stats realm welcome login\ Haproxy stats auth admin:admin stats hide-version stat...

ssh over socks5:通过socks5 proxy来连接ssh服务器[转载]

最近因为不可描述的原因,我在aws soul的云主机访问不了,ssh、80、ss全部都被禁掉了。 80端口在chrome配置SwitchyOmega就可以了,但ssh不太好办,shell上配置http_proxy对ssh没什么用。 其实ssh自己就支持proxy。 注意这跟在ssh端口转发:远程和本地中介绍过使用ssh作为proxy的方法不同,ssh -D是为了用ssh做proxy,而不是通过proxy来连接ssh服务器。 TL;DR ssh -o ProxyCommand='nc -x 192.0.2.0:1080 %h %p' user@awshost 原理解析 $ man ssh_config ProxyCommand Specifies the command to use to connect to the server. The command string extends to the end of the line, and is executed using the user's shell ‘exec’ directive to avoid a lingering shell process. In the command string, any occurrence of ‘%h’ will be substituted by the host name to connect, ‘%p’ by the port, and ‘%r’ by the remote user name. The command can be basically anything, and should read from its standard input and write to its standard output. It should eventually connect an sshd(8) server running on some machine, or execute sshd -i somewhere. Host key management will be done using the HostName of the host being connected (defa...