前言
在之前的一篇文章中介绍了两种 Project V 的负载均衡的方式:1. 通过 Project V 自带的负载均衡 2. 通过 Haproxy。 今天来介绍第三种方式:Nginx
Nginx 简介
Nginx 是一款可以托管 Http 的软件,很多朋友使用 Nginx 来配合 PHP, Mysql 等来组成经典的’LENP’环境用于搭建网站。Nginx 除了简单的网页托管和反向代理的功能之外,还可以对 TCP 流量进行负载均衡,性能亦十分优秀。 Nginx 所支持的平台也十分全面,即使在 Windows 系统也可以找到官方提供的分发包;而 Windows 的用户若是想要使用 Haproxy 则不得不借助 cygwin
这一软件来提供类 Linux 环境来编译 Haproxy。
但 Nginx 有一个缺点: 那就是主动后端检测的功能需要付费版才能提供,免费版只有被动检测的功能。
不过,这并不妨碍我们试一试
拓扑结构
====> server1
|
data ===> Project V ====> Nginx ====> server2
|
====> server3
Nginx 配置
Nginx 的安装
Nginx 的安装过程不再赘述。需要注意的是如果你是 Windows 用户,去官网下载的时候不要下载成源码包(后缀是.tar.gz),应该下载后缀为.zip
的压缩包,里面会有 Windows 的可执行文件。
配置文件
以下贴出主要的配置:
直接打开默认的配置文件nginx.conf
, 键入以下内容:
worker_processes auto;
events {
worker_connections 1024;
}
stream{
server{
listen localhost:10000;
proxy_pass v2ray_backend;
proxy_timeout 10m;
proxy_connect_timeout 5000ms;
}
upstream v2ray_backend{
server 服务器1的IP:1的端口 max_fails=3 fail_timeout=30s weight=1;
server 服务器2的IP:1的端口 max_fails=3 fail_timeout=30s weight=1;
server 服务器3的IP:1的端口 max_fails=3 fail_timeout=30s weight=1;
server 服务器4的IP:1的端口 max_fails=3 fail_timeout=30s weight=1;
}
}
主要配置参数的解释
负载均衡主要的功能都在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 相似,这个是权重的意思,不赘述。
注意事项
Unix类系统的用户可以方便的开启和关闭 Nginx,Windows的用户需要注意,软件开启后会有黑窗一闪而过,并不会有图形界面。要想知道是否正确运行的话有两种方便的方法:
- 查看日志:
到软件的logs
文件夹中查看日志,失败的话会有报错信息在里面
- 查看进程:
打开任务管理器,成功的话里面会有名叫nginx的进程存在
另外 Windows 用户可以使用bat
脚本来快速关闭Nginx,将以下内容保存成后缀为.bat
的文件即可。需要关闭Nginx的时候直接双击它:
@echo off
tasklist|find /i "nginx.exe" && taskkill /im nginx.exe /f && taskkill /im cmd.exe || taskkill /im cmd.exe
Project V 配置
-
如果你没有启用TLS,那么Project 的配置方法和这篇文章中第一种方法中介绍的一样。
-
如果你启用了TLS,那么配置要做调整:只需申请一个 TLS 证书,然后把证书和密钥复制到所有的 VPS 并配置好 TLS,接着客户端配置里 address 填各个服务器的 IP,在 tlsSettings 的 serverName 填证书的域名。
启用了TLS后,Project V 的配置文件如下:
{
"inbound": {
...
},
"outbound": {
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "0.0.0.0", //Nginx 监听的地址
"port": 10000, //Nginx 监听的端口
"users": [
{
"id": "1ce383ea-13e9-4939-9b1d-20d67135969a",
"alterId": 64
}
]
}
]
},
"streamSettings": {
"tlsSettings":{
"serverName":"TLS证书对应的域名",
"allowInsecure":true
},
...
}
},
...
}
此时,Nginx 配置中的,服务器端口应指定为443,即:
···
upstream v2ray_backend{
server 服务器1的IP:443 max_fails=3 fail_timeout=30s weight=1;
server 服务器2的IP:443 max_fails=3 fail_timeout=30s weight=1;
server 服务器3的IP:443 max_fails=3 fail_timeout=30s weight=1;
server 服务器4的IP:443 max_fails=3 fail_timeout=30s weight=1;
}
···
如此以来我们就成功借助 Nginx 实现了负载均衡,实测下来效果也不错。
写在最后
使用 Nginx 负载均衡 Project V 的方法已经介绍完毕,如果需要使用一些 Nginx 的其他功能,可以参考参考文献列出的一些文章。 如果错误请不吝指正。