nginx实现负载均衡
(一) 组网图
(二) 简要说明
通过前面的学习,我们已经基本了解了nginx的反向代理逻辑,这里我们结合起来一起来配置一下nginx的核心功能负载均衡。
可解决问题:
(一) 请求压力过大时,选用多个后台进行分压,从而实现负载后的压力均摊。
(三) nginx配置
#user nobody;
worker_processes 1; #开启niginx工作进程,一般几个CUP核心写几个
error_log /usr/local/nginx/logs/error.log;
events {
worker_connections 1024; #一个进程能同时处理1024个请求
}
http {
gzip on; #开启gzip压缩
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/plain text/css test/javascript application/json application/javascript application/x-javascript application/xml;
#设置需要压缩的数据格式
gzip_vary on;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
types_hash_max_size 2048;
# 日志配置
access_log /usr/local/nginx/access.log;
#负载均衡
upstream zhihuisystem.zhengwei.com{
# max_fails 请求失败次数,fail_timeout 请求超时时间,weight压力策略,均为1即2个服务接口请求接收比例为1:1
server 59.175.36.87:1060 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.232:15587 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 88;
server_name zhihuisystem.zhengwei60.com; #同一端口外网映射后,使用不同ip访问不同的内网服务
charset utf-8;
root /usr/local/ISA;
index index.html;
#定义index页面
error_page 404 /index.html;
#反向代理通配 ISA请求接口
location ^~ /api/
{
#proxy_pass http://192.168.1.60:15587;
proxy_pass http://zhihuisystem.zhengwei.com;
proxy_send_timeout 1800;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
client_max_body_size 2048m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded=-Proto $scheme;
}
#反向代理通配 地图资源
location ^~ /googleMap/
{
#proxy_pass http://192.168.1.60:15587;
proxy_pass http://zhihuisystem.zhengwei.com;
proxy_send_timeout 1800;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
client_max_body_size 2048m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded=-Proto $scheme;
}
#反向代理通配 设备管理协议接口
location ^~ /deviceManage/
{
#proxy_pass http://192.168.1.60:15587;
proxy_pass http://zhihuisystem.zhengwei.com;
proxy_send_timeout 1800;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
client_max_body_size 2048m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded=-Proto $scheme;
}
#反向代理通配 模板下载路径
location ^~ /mould/
{
#proxy_pass http://192.168.1.60:15587;
proxy_pass http://zhihuisystem.zhengwei.com;
proxy_send_timeout 1800;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
client_max_body_size 2048m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded=-Proto $scheme;
}
#反向代理通配 后台文件生成目录
location ^~ /temp/
{
# proxy_pass http://192.168.1.60:15587;
proxy_pass http://zhihuisystem.zhengwei.com;
proxy_send_timeout 1800;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
client_max_body_size 2048m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded=-Proto $scheme;
}
}
}
测试配置文件备份:
(四) 本地配置域名解析便于外网访问
a) Windows配置访问验证
访问C:\Windows\System32\drivers\etc 下打开hosts文件 加入
zhihuisystem027.gnway.cc zhihuisystem.zhengwei.com
这里我们以ISA项目进行验证,通过上面的配置信息可以看到(红色部分)我们代理接口均指向upstream的集合,而集合中配置的是运行在【60后台服务】59.175.36.87:1060(同时验证跨域)和【232后台服务】 192.168.1.232:15587 。
同样通过Postman向代理服务发送接口
连续点击发送请求,分别查看232和60上运行的服务日志
负载均衡实现,且也实现反向代理外网ip。
附加异常测试(热备)
(一) 模拟启动一台tomcat宕机后,持续发送请求
关闭60tomcat
持续发送请求查看 60 和232日志
可以看到当其中一台tomcat宕机后,所有请求会分发给运行中的tomcat。
(二) 宕机恢复后,持续发送请求
恢复60服务
持续发送请求,查看60和232的日志
可以看到tomcat宕机恢复后,所有请求又会开始持续分发。
遗留问题:目前的分发机制中,当宕机tomcat恢复时,tomcat启动需要一定数据,此时持续发送请求时,请求一直处于待回执状态,这里后续需要寻求解决方法。
b) Linux配置访问验证
访问编辑/etc/hosts
内容参考windows下配置
验证内容:略