之前说过大部分我们用到的配置都是在http模块中配置的,这里要实现的负载均衡也是一样的,要在http模块中的http全局块中指定,这里我们先给出一个例子
demo
powershell
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#定义一个名为名为 backend 的 upstream 指令域 ,默认使用的轮询,
#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,
#故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,
#分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
# 默认的weight值是1
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
# 可以给每个服务器设定不同的权重
upstream backend01 {
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8081 weight=1;
}
# 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backend02 {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name 121.4.170.108;
# 在页面输入121.4.170.108 会默认跳转到tomcat的页面
location / {
proxy_pass http://backend02;
}
}
}
定义负载均衡模块,upstream开头
我们在这里定义了三个负载均衡,分别名为backend,backend01,backend02,具体使用哪个需要在server块中指定,如这里proxy_pass 后面跟的是http://backend02;,也可以是http://backend01或者http://backend
powershell
server {
listen 80;
server_name 121.4.170.108;
# 在页面输入121.4.170.108 会默认跳转到tomcat的页面
location / {
proxy_pass http://backend02;
}
}
配置负载均衡
定义负载均衡
使用upstream开头
定义一个名为名为 backend 的 upstream 指令域 ,默认使用的轮询,
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,
故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,
分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
默认的weight值是1
- demo01
定义的位置是在http的全局块中,这里定义了一个名为backend的负载均衡配置
powershell
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
- demo02
可以给每个服务器设定不同的权重
powershell
upstream backend01 {
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8081 weight=1;
}
- demo03
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
powershell
upstream backend02 {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
还有别的配置规则,这里不一一举例
指定具体的负载均衡规则
就如我们上面所说,在proxy_pass后指定即可
powershell
server {
listen 80;
server_name 121.4.170.108;
# 在页面输入121.4.170.108 会默认跳转到tomcat的页面
location / {
proxy_pass http://backend02;
}
}