Nginx + Tomcat 构筑Web服务器集群的负载均衡

本文详细介绍了如何使用Nginx与Tomcat构建Web服务器集群的负载均衡,涵盖了Nginx的核心特点,如非阻塞、高并发处理,以及upstream负载的5种策略。文章还详细讲解了配置Nginx反向代理和负载均衡的步骤,包括nginx-sticky-module、load-balance调度算法、健康检查和缓存功能。通过测试,验证了缓存功能、负载均衡和健康检查的正确性,确保了系统在后端服务器出现问题时仍能正常运行。此外,文章还讨论了Nginx实现动静分离的原理和配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、什么是代理服务

1.1、正向代理

 1.2、反向代理

2、Nginx + Tomcat 构筑Web服务器集群的负载均衡

2.1、Nginx的核心特点

2.2、Nginx 的 upstream 负载的5种策略

2.3、环境拓扑

2.4、nginx部署

 2.5、部署web服务器tomcat1

2.5.1、安装tomcat

 2.6、部署web服务器tomcat2

 2.7、配置nginx负载均衡

 2.7.1、nginx-sticky-module模块

2.7.3、load-balance调度算法

 2.7.4、负载均衡与健康检查

 2.7.5、nginx的proxy缓存使用

 2.7.6、修改nginx配置文件

2.7.7、重启nginx服务

2.8、测试

 2.8.1、测试缓存功能

 2.8.2、测试负载均衡

 2.8.3、测试健康检查即容错性

 2.8.4、后端服务器获取客户端真实ip

 2.9、补充说明

 3、使用nginx实现动静分离

3.1、原理

 3.2、修改nginx代理服务器配置文件

 3.3、测试


介绍

1、什么是代理服务

代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。
刚开始的时候,代理多数是帮助内网client访问外网server用的
后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内

1.1、正向代理

正向代理类似一个跳板机,代理访问互联网资源

正向代理的用途:

       (1) 可以做缓存,加速访问资源

  (2)对客户端访问授权,上网进行认证

  (3)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

 1.2、反向代理

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器

反向代理的作用:

(1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网

(2)负载均衡,通过反向代理服务器来优化网站的负载

2、Nginx + Tomcat 构筑Web服务器集群的负载均衡

 Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx(发音同engine x),它是由俄罗斯程序员Igor Sysoev所开发的。起初是供俄国大型的门户网站及搜索引擎Rambler使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。

2.1、Nginx的核心特点

(1)跨平台:Nginx 可以在大多数OS编译运行,而且也有Windows的版本;

(2)配置异常简单:非常容易上手。

(3)非阻塞、高并发连接

(4)事件驱动:通信机制采用epoll模型,支持更大的并发连接

(5)Master/Worker结构:一个master进程,生成一个或多个worker进程

(6)内存消耗小:处理大并发的请求内存消耗非常小。

(7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问

(8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头

(9)稳定性高:用于反向代理,宕机的概率微乎其微

2.2、Nginx 的 upstream 负载的5种策略

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、指定权重
指定轮询权重,用于后端服务器性能不均的情况。

3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

2.3、环境拓扑

主机 IP 角色
nginx 192.168.121.10 反向代理服务器
tomcat1 192.168.121.11 web服务器
tomcat2 192.168.121.12 web服务器

2.4、nginx部署

上传软件包并解压

 解压

[root@nginx ~]# tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/

安装依赖包

[root@nginx ~]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel  pcre pcre-devel

预编译

添加www组,创建nginx运行账户www并加入到www组,不允许www用户直接登录系统。

[root@nginx ~]# groupadd www
[root@nginx ~]# useradd -g www -s /sbin/nologin www

    注:
    结合proxy和upstream模块实现后端web负载均衡
    使用proxy模块实现静态文件缓存
    结合nginx默认自带的ngx_http_proxy_module模块 和ngx_http_upstream_module模块实现后端服务器的健康检查,也可以使用第三方模块nginx_upstream_check_module
    使用nginx-sticky-module扩展模块实现会话黏贴(保持会话)
    使用ngx_cache_purge [pɜːrdʒ]实现更强大的缓存清除功能
    上面提到的2个模块都属于第三方扩展模块,需要提前下好源码,然后编译时通过--add-moudle=src_path一起安装。

[root@nginx nginx-1.10.3]# tar zxf ngx_cache_purge-2.3.tar.gz  -C  /usr/local/src/
[root@nginx nginx-1.10.3]# tar zxf master.tar.gz  -C  /usr/local/src/
[root@nginx nginx-1.10.3]# cd /usr/local/src/nginx-1.10.3/
[root@nginx nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_realip_module --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi  --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_flv_module --add-module=../ngx_cache_purge-2.3 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42

编译安装

[root@nginx nginx-1.10.3]# make && make install

启动nginx

[root@nginx nginx-1.10.3]# mkdir -p /var/tmp/nginx/{client,proxy,fcgi}
[root@nginx nginx-1.10.3]# chown -R www:www /var/tmp/nginx/
[root@nginx nginx-1.10.3]# /usr/local/nginx/sbin/nginx

查看端口号

[root@nginx nginx-1.10.3]# netstat -antup | grep 80

 网站访问测试

    注:nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载。
    注:如果你想在已安装好的nginx上添加第三方模块,依然需要重新编译,但为了不覆盖你原有的配置,请不要make install,而是直接拷贝可执行文件:
    [root@cong11 nginx-1.10.3]#./configure --add-module=……   #你的第三方模块
    [root@cong11 nginx-1.10.3]#make   后不要make install,改为手动拷贝,先备份
    [root@cong11 nginx-1.10.3]#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    [root@cong11 nginx-1.10.3]#cp  objs/nginx  /usr/local/nginx/sbin/nginx

 2.5、部署web服务器tomcat1

安装JDK

上传需要的软件包

 解压JDK

[root@tomcat1 ~]# tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

配置JDK环境变量

[root@tomcat1 ~]# vim /etc/profile

#在文件最后加入一下行
 JAVA_HOME=/usr/local/jdk1.8.0_171 
 PATH=$JAVA_HOME/bin:$PATH
 CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
 export PATH JAVA_HOME CLASSPATH

 #使环境变量生效

[root@tomcat1 ~]# source /etc/profile

2.5.1、安装tomcat

解压软件包

[root@tomcat1 ~]# tar -zxvf apache-tomcat-8.5.42.tar.gz -C /usr/local/

重命名目录

[root@tomcat1 ~]# cd /usr/local/
[root@tomcat1 local]# mv apache-tomcat-8.5.42/ tomcat

建立系统服务文件

[root@tomcat1 local]# vim /lib/systemd/system/tomcat.service

    [Unit]
    Description=tomcat
    After=network.target
    
    [Service]
    Type=forking
    Environment=JAVA_HOME=/usr/local/jdk1.8.0_171/
    Environment=CATALINA_HOME=/usr/local/tomcat
    ExecStart=/etc/init.d/tomcat start
    ExecStop=/etc/init.d/tomcat stop
    ExecRestart=/etc/init.d/tomcat restart
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
 

 #重载service文件

systemctl daemon-reload

启动tomcat

systemctl start tomcat

添加开机自启动

systemctl ena
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值