nginx 负载均衡配置教程
1、启动两个后端服务
这里准备了两个springboot工程,编写了2个测试使用的接口,以端口号区分
@RestController
@RequestMapping("/api")
public class NginxController1 {
@GetMapping
public String test1(){
return "success test1 8082";
}
}
@RestController
@RequestMapping("/api")
public class NginxController1 {
@GetMapping
public String test1(){
return "success test1 8081";
}
}
启动之后,浏览器分别访问一下,确保服务是正常的
2、nginx.conf进行配置
1)在server中添加一个location,并且配置 proxy_pass
location / {
#转发到负载服务上
proxy_pass http://webservers/api/;
}
2)配置upstream,指向后端服务
upstream webservers{
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}
完整的配置参考如下:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream webservers{
server 192.168.9.134:8081 weight=8;
server 192.168.9.134:8082 weight=2;
}
server {
listen 80;
server_name localhost;
#location / {
# root html;
# index index.html index.htm;
#}
location / {
#转发到负载服务上
proxy_pass http://webservers/api/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
修改完毕后,启动nginx,或者重新加载配置
nginx.exe -s reload
浏览器访问:localhost:80,多刷几次,下面两个展示的界面轮询的出现
3、负载均衡配置说明
默认情况下,直接按照上面的配置后,如果后端有多个服务,采用的是轮询策略;
常用的可选配置包括:
weight 多台机器,可以配置权重值,权重高的服务将会优先被访问
down 某个服务配置down之后,这台服务将不会被访问
backup 配置了这个参数后,除非其他的服务都挂掉了,否则这台服务将不会被访问到
以weight 为例做简单的说明,在上面的配置中,补充weight参数
upstream webservers{
server 192.168.9.134:8081 weight=8;
server 192.168.9.134:8082 weight=2;
}
重新加载配置,按照上面的测试步骤再次刷新页面,这时候可以发现,8081对于的这个服务将会被更多的访问到;
其他负载均衡配置策略
默认情况下,nginx采用的是轮询策略,nginx还提供了其他几种常用的负载均衡配置
1、ip_hash
每个请求按访问IP的hash结果进行分配,这样每个访客就可以固定访问一个后端服务,一定程度上可以解决session问题;
upstream webservers {
ip_hash;
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}
2、weight
weight代表权重,默认为1,权重越高,被分配的客户端请求就会越多
upstream webservers{
server 192.168.9.134:8081 weight=8;
server 192.168.9.134:8082 weight=2;
}
3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的将会被优先分配
upstream webservers{
server 192.168.9.134:8081;
server 192.168.9.134:8082;
fair;
}
4、url_hash
按访问URL的hash结果分配。这样相同的url会被分配到同一个节点,主要为了提高缓存命中率。比如,为了提高访问性能,服务端有大量数据或者资源文件需要被缓存。使用这种策略,可以节省缓存空间,提高缓存命中率
upstream webservers{
hash &request_uri;
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}
5、least_conn
按节点连接数分配,把请求优先分配给连接数少的节点。该策略主要为了解决,各个节点请求处理时间长短不一造成某些节点超负荷的情况。
upstream webservers{
least_conn;
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}
这里准备了两个springboot工程,编写了2个测试使用的接口,以端口号区分
@RestController
@RequestMapping("/api")
public class NginxController1 {
@GetMapping
public String test1(){
return "success test1 8082";
}
}
@RestController
@RequestMapping("/api")
public class NginxController1 {
@GetMapping
public String test1(){
return "success test1 8081";
}
}
启动之后,浏览器分别访问一下,确保服务是正常的
2、nginx.conf进行配置
1)在server中添加一个location,并且配置 proxy_pass
location / {
#转发到负载服务上
proxy_pass http://webservers/api/;
}
2)配置upstream,指向后端服务
upstream webservers{
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}
完整的配置参考如下:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream webservers{
server 192.168.9.134:8081 weight=8;
server 192.168.9.134:8082 weight=2;
}
server {
listen 80;
server_name localhost;
#location / {
# root html;
# index index.html index.htm;
#}
location / {
#转发到负载服务上
proxy_pass http://webservers/api/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
修改完毕后,启动nginx,或者重新加载配置
nginx.exe -s reload
浏览器访问:localhost:80,多刷几次,下面两个展示的界面轮询的出现
3、负载均衡配置说明
默认情况下,直接按照上面的配置后,如果后端有多个服务,采用的是轮询策略;
常用的可选配置包括:
weight 多台机器,可以配置权重值,权重高的服务将会优先被访问
down 某个服务配置down之后,这台服务将不会被访问
backup 配置了这个参数后,除非其他的服务都挂掉了,否则这台服务将不会被访问到
以weight 为例做简单的说明,在上面的配置中,补充weight参数
upstream webservers{
server 192.168.9.134:8081 weight=8;
server 192.168.9.134:8082 weight=2;
}
重新加载配置,按照上面的测试步骤再次刷新页面,这时候可以发现,8081对于的这个服务将会被更多的访问到;
其他负载均衡配置策略
默认情况下,nginx采用的是轮询策略,nginx还提供了其他几种常用的负载均衡配置
1、ip_hash
每个请求按访问IP的hash结果进行分配,这样每个访客就可以固定访问一个后端服务,一定程度上可以解决session问题;
upstream webservers {
ip_hash;
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}
2、weight
weight代表权重,默认为1,权重越高,被分配的客户端请求就会越多
upstream webservers{
server 192.168.9.134:8081 weight=8;
server 192.168.9.134:8082 weight=2;
}
3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的将会被优先分配
upstream webservers{
server 192.168.9.134:8081;
server 192.168.9.134:8082;
fair;
}
4、url_hash
按访问URL的hash结果分配。这样相同的url会被分配到同一个节点,主要为了提高缓存命中率。比如,为了提高访问性能,服务端有大量数据或者资源文件需要被缓存。使用这种策略,可以节省缓存空间,提高缓存命中率
upstream webservers{
hash &request_uri;
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}
5、least_conn
按节点连接数分配,把请求优先分配给连接数少的节点。该策略主要为了解决,各个节点请求处理时间长短不一造成某些节点超负荷的情况。
upstream webservers{
least_conn;
server 192.168.9.134:8081;
server 192.168.9.134:8082;
}