前言
本文接着讲解web与nginx的网络服务,主要讲了反向代理、负载均衡、后端的原理及概念,并且进行了实战操作。
一、反向代理
1.1 原理
用户请求先到 Nginx,再由 Nginx 把请求转发给后端的应用服务器(比如 Tomcat、Node.js、Spring Boot)。
Nginx 在这里就像“中转站”,客户端只知道自己连的是 Nginx,不知道真正提供服务的是哪台后端。
nginx ——————》应用服务器——————》后端服务器
1.2 配置
编辑 nginx.conf ,在 server 块里添加:
proxy_pass http://xjy_server; # 把请求转发到后端 8080 端口
proxy_set_header Host $host; ———————— 保留原始的 Host 头
proxy_set_header X-Real-IP $remote_addr; #————————获取客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

现在访问 http://localhost/ ,实际会由 Nginx 转发到 http://10.0.0.4:8081/ 。
二、负载均衡
Nginx 的负载均衡是它最常用的功能之一,可以将客户端请求分发到多台后端服务器,提高系统的并发
能力、可用性和稳定性。
2.1 基本原理
Nginx 作为反向代理服务器,接收来自客户端的请求,然后根据配置的负载均衡策略,将请求转发到后端的多个应用服务器(upstream server)。
好处:
1、提高性能:分担单台服务器压力
2、高可用性:某台服务器宕机,Nginx 自动转发到其他正常的节点
3、可扩展性:轻松添加或移除后端节点
2.2 常见负载均衡策略
以下是 Nginx 支持的几种常见的分流算法:
2.2.1 轮询(Round Robin)
轮询算法是 Nginx 的默认分流算法。它按顺序将请求依次分配给每一台后端服务器,直到最后一台服务器,然后重新从第一台服务器开始。这种方法简单且均匀地分配了流量。

大致意思为:假设有三个应用服务,那么第一个客户的请求信息由第一个应用服务处理,第二个客户的请求信息由第二个应用服务处理,第三个客户的请求信息由第三个应用服务处理,第四个客户的请求信息由第一个处理,依次循环处理,这样的方式可以保证应用服务的工作量均匀分布。
(默认是轮询)
数据流向:每个请求依次被分配到下一个服务器。假设有三台服务器(Server A、Server B、ServerC),第一个请求被分配到 Server A,第二个请求分配到 Server B,第三个请求分配到 Server C,第四个请求又回到 Server A,依此类推。
特点:请求均匀分布,无视服务器的当前负载和响应时间。
2.2.2 最少连接数(Least Connections)
最少连接数算法将请求分配给当前活动连接数最少的服务器。这种算法适用于请求处理时间不均匀的情况,可以有效平衡服务器的负载。
数据流向:每个请求被分配到当前连接数最少的服务器。例如,Server A 有 2 个连接,Server B 有 5 个连接,新的请求会被分配到 Server A。

特点:动态均衡负载,适用于请求处理时间不一的场景
大致意思为:三个应用服务,若有一个的最大连接数量较少,则当它的连接数量达到极限时,会将它剩下的请求交由其他应用服务处理。
2.2.3 IP 哈希:
IP 哈希算法通过计算客户端 IP 地址的哈希值,将请求始终分配给同一台服务器。适用于需要将特定客户端的请求固定在同一台服务器上的场景。
数据流向:每个客户端的 IP 地址被哈希计算,然后根据哈希值将请求固定分配到某一台服务器。假设客户端 X 的哈希值指向 Server A,客户端 Y 的哈希值指向 Server B,则无论多少次请求,X 的请求总是流向 Server A,Y 的请求总是流向 Server B。
特点:同一个客户端总是被分配到同一台服务器,有助于会话保持。

大致意思为:每个客户在发起请求之后,ip地址将通过某个算法进行计算,通过计算的结果分配应用服务器。
2.2.4 加权轮询
加权轮询算法允许为每台服务器设置权重,权重越大的服务器将会获得更多的请求。适用于服务器性能不均衡的情况。
数据流向:根据服务器设置的权重值分配请求。假设 Server A 权重为 3,Server B 权重为 1,则 4 个请求中,3 个会被分配到 Server A,1 个会被分配到 Server B。
特点:高权重服务器接收更多的请求,适用于服务器性能差异较大的场景。

大致意思为:假设有三个应用服务器,而每个的配置不一样,则加权轮询是在轮询的基础上进行,分配数量的改变,比如A服务器配置较高加权等级为3,B服务器配置中等,加权等级为2,C服务器配置等级较低,加权等级为1,则每6个客户的请求会有3个给到A服务器,2个给到B服务器,1个给到C服务器,后续进行这样的循环。
三、后端 tomcat
3.1 Tomcat 的本质
Tomcat 本质上是一个 Servlet 容器,也可以称作一个轻量级 Web 应用服务器(Web Server + ServletContainer)。
它的主要职责是:
1、接收 HTTP 请求(内置了一个简单的 HTTP 服务器)
2、将请求分发给对应的 Web 应用(基于 URL 映射)
3、执行 Servlet / JSP 并生成响应
4、返回 HTTP 响应给客户端
3.2 运行原理
Tomcat 的核心工作流程可简化为以下几个步骤:
3.2.1 启动
1、加载 server.xml 配置,启动各个 Connector (监听端口,如 8080)
2、初始化 Service 、 Engine 、 Host 、 Context 组件
3、创建并初始化 Servlet 容器
3.2.2接收请求
1、Connector 监听 HTTP 请求(基于 NIO/线程池)
2、请求被封装为 Request 对象
3.2.3 请求分发
1、Mapper 根据 URL → 找到对应的 Context (即某个 Web 应用)
2、找到对应的 Wrapper (某个 Servlet)
3.2.4 执行 Servlet
1、Tomcat 调用 Servlet 的 service() 方法
2、Servlet 处理请求,可能访问数据库或调用其他 API
3、返回 Response 对象
3.2.5 响应客户端
1、Tomcat 将 Response 转换为 HTTP 响应报文
2、通过 Socket 返回给客户端浏览器
3.3 主要配置文件

四、部署反向代理与负载均衡
要求:
两台虚拟机做tomcat,其中一台做两个,一台做一个
一台nginx
4.1 部署Nginx 负载均衡器
第一步 安装nginx(不会的可以看前几期博客)
第二步 nginx服务编辑
vim /lib/systemd/system/nginx.service
将以下写入nginx服务文件中
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service ————————更改服务文件的权限
systemctl enable nginx.service --now ————————永久开启nginx服务
(以上都是往期博客的nginx安装教程,这里就不做演示)
4.2 第一台虚拟机tomcat应用服务的部署(含两个tomcat)
4.2.1 确保防火墙与网络增强服务关闭
systemctl disable firewalld --now ————————关闭防火墙(永久)

setenforce 0 ————————临时关闭网络增强服务
vim /etc/selinux/config ——————————编辑网络增强服务

4.2.2 配置java文件
第一步 配置
vim /etc/profile
export 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:$PATH

第二步 刷新java文件
source /etc/profile
4.2.3 tomcat的安装与部署
第一步 将tomcat的安装压缩包拖入虚拟机中的/usr/local目录中
第二步 解压压缩包到/usr/local目录中
tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local

第三步 开启tomcat
/usr/local/tomcat/bin/shutdown.sh ————————关闭

/usr/local/tomcat/bin/startup.sh ————————开启

(以上为tomcat的安装部署流程与java的配置,第二个tomcat仿照上述操作)
4.3 动静态分离配置
4.3.1 创建动态页面脚本目录
mkdir -p /usr/local/tomcat/webapps/xjy3 (这个目录随便取)

4.3.2 编辑动态页面脚本文件
vim /usr/local/tomcat/webapps/xjy3/index.jsp————————编辑脚本文件
在脚本文件中写入
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
另一个tomcat也是同样的操作
4.4 Nginx server 配置
4.4.1 静态页面

4.4.2 创建放置图片的目录
第一步 mkdir /usr/local/nginx/html/img ——————创建图片目录

第二步 将图片放进目录 ——————cd至图片目录,直接将图片拖入

第三步 配置nginx服务
在nginx配置文件中加入:
upstream xjy_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;
}
(tomcat的ip与端口以及权重)
location ~ .*.jsp$ {
proxy_pass http://xjy_server; ————————设置后端的Web服务器可以获取远程客户端的真实IP
proxy_set_header HOST $ host; ————————设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
proxy_set_header X-Real-IP $ remote_addr——————把$remote_addr赋值给X-Real-IP,来获取源IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;——————在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
(该步骤用于配置反向代理)
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css)$ { —————以括号里面这些结尾的文件
root /usr/local/nginx/html/img; ————————引用该目录下的文件
expires 10d; ————————有效时期10天
}
(该步骤是用于配置静态图片请求的)

4.5 静态页面
在浏览器上搜索http://10.0.0.4
10.0.0.4——————配置nginx的ip

4.6 动态页面展示
在浏览器上搜索http://10.0.0.4/144.djp
10.0.0.4 ——————配置nginx的IP
144.djp ——————图片名字及属性

总结
本文接着讲解web与nginx的网络服务,主要讲了反向代理、负载均衡、后端的原理及概念,并且进行了实战操作,希望本文能对您有所帮助,谢谢观看😜
1730

被折叠的 条评论
为什么被折叠?



