nginx反向代理、负载均衡
一、反向代理 proxy模块
1、作用
提升业务的性能、并发能力
隐藏后端真实业务服务器的信息,增强安全性
2、语法
location URI {
proxy_pass 后端服务器地址;
}
- 访问nginx时地址为/kr, 代理到192.168.140.10:9000
location /kr {
proxy_pass http://192.168.140.10:9000/project;
}
- 注意: 后端服务器没有具体的uri地址时,nginx会将location中的uri地址拼接到后端服务器地址
location /test {
proxy_pass http://192.168.140.10:9000;
}
- 注意:location以正则表达式匹配请求时,后端服务器地址不允许有任何uri
location ~ /music {
proxy_pass http://192.168.140.10:9000/project;
}
3、配置后端服务器记录真实的客户端地址
nginx进行反向代理时,默认情况下,后端业务服务器记录访问日志时会记录Nginx的地址,为了让后端能正常记录真实的客户端地址,需要做如下配置:
- 通过proxy_set_header在请求中添加X-REAL-IP字段
location /kr {
proxy_pass http://192.168.140.10:9000/project;
proxy_set_header X-REAL-IP $remote_addr;
}
- 修改后端业务服务器的访问日志格式
pattern="%{X-REAL-IP}i %t "%r" %s %b %{Referer}i %{User-Agent}i"
二、负载均衡 upstream模块
2.1 负载均衡作用
提升业务的并发能力
由nginx接收请求,根据不同的算法/策略将请求转发到后端的多个服务器上
2.2 调度算法/策略
-
rr 轮询,默认算法, 负载均衡效果最优
支持设置不同的权重值 -
sh 源hash
一段连续的时间内,同一个客户端的所有请求会到同一个后端服务器 -
lc 最少连接
2.3 配置语法
upstream 服务器组 {
[负载均衡算法];
server IP:port [weight=1] [fail_timeout=秒] [max_fails=次数];
server IP:port;
}
location uri {
proxy_pass http://服务器组;
}
upstream java {
server 192.168.140.10:9000 weight=1 fail_timeout=3 max_fails=2;
server 192.168.140.10:9001 weight=1 fail_timeout=3 max_fails=2;
server 127.0.0.1:8000 backup;
}
location / {
proxy_pass http://java/project/;
proxy_set_header X-REAL-IP $remote_addr;
}
location /mp3 {
proxy_pass http://java/music/;
proxy_set_header X-REAL-IP $remote_addr;
}
server {
listen 8000;
server_name localhost;
location / {
root /sorry;
index index.html index.htm;
}
}