1)导入自定义配置
打开nginx.conf
文件,然后在文件的最后一行的}
上面引入配置:
include vhost/*.conf;
这个配置的意思是 导入 vhost
目录下的所有以.conf
为后缀的文件。这样可以做到多配置文件分离,方便管理。
现在,我们需要在conf
目录中新建一个名为vhost
的目录:
并在vhost
中创建配置文件,这里我们叫myConfig.conf
:
在myConfig.conf
中写入下面配置:
server {
listen 80;
server_name url-1;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_connect_timeout 600;
proxy_read_timeout 5000;
}
}
server {
listen 80;
server_name url-2;
location / {
proxy_pass http://127.0.0.1:9002;
proxy_connect_timeout 600;
proxy_read_timeout 5000;
}
}
server {
listen 80;
server_name url-3;
location / {
proxy_pass http://127.0.0.1:10010;
proxy_connect_timeout 600;
proxy_read_timeout 5000;
}
}
配置解读:
server
:定义一个监听服务配置listen
:监听的端口server_name
:监听的域名,端口一致,域名不同也不会处理location
:匹配当前域名下的哪个路径。例如:/
,代表的是一切路径proxy_pass
:监听并匹配成功后,反向代理的目的地,可以指向某个ip和portproxy_connect_timeout
:反向代理后的连接超时时间proxy_read_timeout
:反向代理后的读取超时时间
负载均衡
我们的nginx反向代理,目标服务器地址是通过IP和Port来指定,那么新的问题来了:
如果我们的url
不是单节点,而是一个服务集群
此时该怎么办呢?nginx该如何配置访问集群中的哪个节点呢?
这就需要负载均衡的策略配置了。
1)负载均衡轮询策略
首先定义负载均衡的集群节点信息,及负载均衡的策略,默认策略是轮询,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,本例中配置四个节点轮询:
# 负载均衡配置,默认是轮询
upstream my-balancing{
server 127.0.0.1:9001; # 节点信息
#server 127.0.0.1:9002; # 节点信息
#server 127.0.0.1:9003; # 节点信息
#server 127.0.0.1:9004; # 节点信息
}
然后在反向代理时不要指向具体IP,而是这里配置的:my-balancing
。
server {
listen 80;
server_name url;
location / {
proxy_pass http://my-balancing;
proxy_connect_timeout 600;
proxy_read_timeout 5000;
}
}
2)加权轮询
指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后9001服务的访问比率会是9002服务的二倍。
# 负载均衡配置,默认是轮询
upstream my-balancing{
server 127.0.0.1:9001 weight=1; # 节点信息
server 127.0.0.1:9002 weight=2; # 节点信息
}
3)IP哈希
每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务
upstream my-balancing {
ip_hash;
server 127.0.0.1:9001; # 节点信息
server 127.0.0.1:9002; # 节点信息
}
4)最少连接
将请求分配到连接数最少的服务上。
upstream my-balancing{
least_conn;
server 127.0.0.1:9001; # 节点信息
server 127.0.0.1:9002; # 节点信息
}