Nginx + Tomcat 负载均衡与动静分离

2024-08-26 10:36

本文主要是介绍Nginx + Tomcat 负载均衡与动静分离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • Nginx + Tomcat 负载均衡与动静分离
    • 一、Nginx 应用概述
      • 1.1 正向代理和反向代理
        • 1.1.1 正向代理
        • 1.1.2 反向代理
    • 二、Nginx 负载均衡模式
      • 2.1 轮询(Round Robin)
      • 2.2 最少连接数(Least Connections)
      • 2.3 IP 哈希(IP Hash)
      • 2.4 加权轮询(Weighted Round Robin)
      • 2.5 最少时间算法(Least Time)
      • 2.6 一致性哈希(Consistent Hashing)
    • 三、规划部署负载均衡和反向代理
      • 3.1 部署 Nginx 负载均衡器
      • 3.2 部署 Tomcat 应用服务器
      • 3.3 动静分离配置
    • 四、测试与优化

Nginx + Tomcat 负载均衡与动静分离

Nginx 作为高性能的 HTTP 服务器,被广泛应用于各类互联网服务中。通过结合 Tomcat 应用服务器,Nginx 可以实现负载均衡和动静分离,从而提升系统的性能与稳定性。本文将深入探讨 Nginx 在负载均衡和动静分离中的应用,并提供详细的配置示例。

一、Nginx 应用概述

Nginx 是一款功能强大的 HTTP 服务器软件,具有以下特点:

  • 支持高达 50,000 个并发连接数的响应。
  • 拥有强大的静态资源处理能力。
  • 运行稳定,资源消耗低(内存、CPU)。
  • 被广泛用于大型网站的反向代理和负载均衡,以提升站点的负载并发能力。

这些优势使得 Nginx 成为众多互联网服务的重要组成部分,特别是在处理大量并发请求和静态资源的场景中。

1.1 正向代理和反向代理

代理是 Nginx 的重要功能之一,通过代理机制可以优化网络请求的处理流程。

1.1.1 正向代理

正向代理是指代理客户端访问服务器。在客户端无法直接访问目标服务器时,可以通过正向代理服务器代为访问。这种方式可以加快访问速度,并隐藏客户端的真实信息。

正向代理的工作原理类似于一个跳板:用户无法直接访问某个网站,但可以访问代理服务器,由代理服务器代为获取内容,并将其返回给用户。目标服务器只能记录代理服务器的访问,而不知道用户的具体信息。

1.1.2 反向代理

反向代理代理的是服务器端的请求处理,常用于负载均衡。在多台服务器共同承担服务的情况下,反向代理服务器可以接收客户端的请求,并根据一定规则将请求分发给后端服务器。

反向代理隐藏了服务器的真实信息,客户端只知道请求是由代理服务器处理的,具体的处理服务器则由代理服务器根据负载均衡算法进行选择。

二、Nginx 负载均衡模式

Nginx 提供了多种负载均衡算法,以满足不同场景的需求。以下是 Nginx 支持的几种常见的负载均衡算法及其配置示例。

2.1 轮询(Round Robin)

轮询算法是 Nginx 的默认分流算法,它按顺序将请求依次分配给每一台后端服务器,直到最后一台服务器,然后重新从第一台服务器开始。这种方法简单且均匀地分配流量。

数据流向:每个请求依次被分配到下一个服务器。

特点:请求均匀分布,无视服务器的当前负载和响应时间。

配置示例

upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

2.2 最少连接数(Least Connections)

最少连接数算法将请求分配给当前活动连接数最少的服务器,适用于请求处理时间不均匀的情况,可以有效平衡服务器的负载。

数据流向:每个请求被分配到当前连接数最少的服务器。

特点:动态均衡负载,适用于请求处理时间不一的场景。

配置示例

upstream backend {least_conn;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

2.3 IP 哈希(IP Hash)

IP 哈希算法通过计算客户端 IP 地址的哈希值,将请求始终分配给同一台服务器,适用于需要保持会话状态的场景。

数据流向:每个客户端的请求固定分配到某一台服务器。

特点:有助于会话保持,但可能导致负载不均衡。

配置示例

upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

2.4 加权轮询(Weighted Round Robin)

加权轮询算法允许为每台服务器设置权重,权重越大的服务器将会获得更多的请求。适用于服务器性能不均衡的情况。

数据流向:根据服务器设置的权重值分配请求。

特点:适用于服务器性能差异较大的场景。

配置示例

upstream backend {server backend1.example.com weight=3;server backend2.example.com weight=1;server backend3.example.com weight=2;
}

2.5 最少时间算法(Least Time)

最少时间算法基于请求的响应时间,将请求分配给响应时间最短的服务器,适用于需要最大化响应速度的场景。

数据流向:每个请求分配到响应时间最短的服务器。

特点:优化最少连接算法,适用于高负载环境。

配置示例

upstream backend {least_time header;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

2.6 一致性哈希(Consistent Hashing)

一致性哈希算法在集群中某台服务器故障时,只需重新分配部分请求,非常适用于缓存等场景。

数据流向:根据请求的特定参数进行哈希计算,分配请求。

特点:适用于服务器节点变动频繁的场景。

配置示例(需要第三方模块):

upstream backend {hash $request_uri consistent;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

三、规划部署负载均衡和反向代理

在实际部署中,我们可以结合 Nginx 和 Tomcat 来实现高效的负载均衡和动静分离。

3.1 部署 Nginx 负载均衡器

首先,在 Nginx 服务器上安装和配置 Nginx:

systemctl stop firewalld
setenforce 0yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginxcd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/cd nginx-1.20.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-file-aio --with-http_stub_status_module --with-http_gzip_static_module \
--with-http_flv_module --with-stream --with-http_ssl_modulemake && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/vim /lib/systemd/system/nginx.service

配置文件示例如下:

[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target

完成后,启动并设置为开机自启:

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

3.2 部署 Tomcat 应用服务器

在 Tomcat 服务器上,安装 JDK 并部署 Tomcat:

systemctl stop firewalld
setenforce 0tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
vim /etc/profileexport JAVA_HOME=/usr/local1/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATHsource /etc/profiletar zxvf apache-tomcat-8.5.16.tar.gz
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.shnetstat -ntap | grep 8080

3.3 动静分离配置

在 Nginx 中进行动静分离的配置:

upstream tomcat_server {server 192.168.10.23:8080 weight=1;server 192.168.10.22:8080 weight=1;server 192.168.10.22:8081 weight=1;
}server {listen 80;server_name www.kgc.com;charset utf-8;location ~ .*\.jsp$ {proxy_pass http://tomcat_server;proxy_set_header HOST $host;   proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d;}location / {root html;index index.html index.htm;}
}

四、测试与优化

通过以下步骤测试负载均衡和动静分离配置的效果:

  • 测试静态页面效果:浏览器访问 http://192.168.10.19/
  • 测试负载均衡效果:浏览器访问 http://192.168.10.19/index.jsp 并不断刷新观察分配情况。

根据实际需求,可以调整 Nginx 的负载均衡模式,以适应不同的业务场景。

location / {
root html;
index index.html index.htm;
}
}


## 四、测试与优化通过以下步骤测试负载均衡和动静分离配置的效果:- 测试静态页面效果:浏览器访问 `http://192.168.10.19/`
- 测试负载均衡效果:浏览器访问 `http://192.168.10.19/index.jsp` 并不断刷新观察分配情况。根据实际需求,可以调整 Nginx 的负载均衡模式,以适应不同的业务场景。通过以上配置和优化,Nginx 不仅能够高效地处理大量并发请求,还能实现动静分离,有效提高系统的整体性能和稳定性。

这篇关于Nginx + Tomcat 负载均衡与动静分离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108318

相关文章

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一