Nginx-反向代理
代理服务器就是服务端和用户端的中间人,正向代理第一张图可以隐藏客户端的请求,而反向代理就是隐藏了服务端的服务器,将所有请求先经过代理服务器在转发到后端服务器,可以隐藏后端服务,增加安全性。
1.正向代理和反向代理

代理服务器就是服务端和用户端的中间人,正向代理第一张图可以隐藏客户端的请求,而反向代理就是隐藏了服务端的服务器,将所有请求先经过代理服务器在转发到后端服务器,可以隐藏后端服务,增加安全性
2.nginx反向代理配置
nginx作为反向代理可以提高网站响应速度和可用性,同时隐藏后端服务的复杂性

其中的两种模式第一种和第二种模式能够直接访问外网,第三节模式只能访问宿主机,不能走通外网,他们三种的主要区别
| 模式 | 核心定位 |
|---|---|
| 桥接模式 | 虚拟机直接变成你家 / 公司局域网里的一台独立物理电脑,和你的宿主机(你的笔记本 / 台式机)平级,局域网里所有设备都能直接找到它 |
| NAT 模式(网络地址转换) | 虚拟机躲在宿主机身后,共享宿主机的 IP 上网,宿主机相当于虚拟机的路由器,外网 / 局域网其他设备默认看不到这台虚拟机 |
| 仅主机模式(Host-Only) | 虚拟机和宿主机形成完全封闭的私有网络,只能和宿主机互相通信,完全不能上外网,也和局域网其他设备彻底隔离 |
先添加一张网卡,仅仅主机模式的网卡
点击虚拟网络编辑器添加一张网卡,仅主机模式

在设置里面给三个主机配置网卡

两个tomcat主机配置成仅主机模式也就是开始配置的VMent0,nginx配置两个网卡NAT桥接模式,还有一个VMent0桥接模式
开始安装服务
1.nginx-proxy安装nginx服务
配置nginx镜像源
# 1.配置nginx镜像源
vim /etc/yum.repos.d/nginx.repo
# 2.添加文件内容
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
安装好之后修改配置文件,添加代理转发

什么意思,就是将访问linux服务器user路径的包转发到tomcat-user服务器上下面那个同理
这里一定要注意路径问题,路径一定要正确否则代理会有问题
2.配置tomcat服务器
将jdk文件和tomcat文件上传到两个tomcat服务器,安装,并配置jdk的全局环境变量
# 将两个源码包都解压到/usr/local
tar -zvxf tomcat.tar.gz -C /usr/local
tar -zvxf JDK.tar.gz -C /usr/local
# 配置JDK的全局变量
echo 'export JAVA_HOME=/usr/local/jdk-17.0.18+8' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
echo 'export CLASSPATH=.:$JAVA_HOME/lib' >> /etc/profile
配置好之后检查是否生效

全局生效就是配置成功了
启动tomcat服务
# 进入tomcat的bin目录下启动
./start.sh
在nginx服务器看是够能够访问到tomcat的页面用curl命令访问一下是否能够返回页面

能返回页面,因此连通性没有问题,检查代理是否正常,访问一下user路径,发现返回tomcat页面

同样的不同的路径返回两个不同的tomcat服务器后端,可以做一个验证,修改admin里面ROOT下的index页面

访问admin路径

访问user路径,结果显而易见

这就是反向代理,即使tomcat服务器不能联通外网,但是依然能通过nginx服务连接到后端服务器,增强了安全性,且nginx服务器处理并发能力比tomcat更强,这样配置更合理
3.nginx反向代理获取真实ip
当后端服务器运行的时候获取的ip是nginx-proxy的IP地址因为nginx反向代理到后端服务器其中多了一个nginx代理服务器,因此为了为了获得到这个ip需要配置一下操作
在nginx配置文件中添加
location / {
proxy_pass http://tomcat-admin:8080; # tomcat后端服务器地址
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
配置项说明
Host:传递客户端请求的原始Host头。
X-Real-IP:直接传递客户端真实IP(适用于单层代理)。
X-Forwarded-For:记录请求链路IP列表(格式:client_ip, proxy1_ip, proxy2_ip),$proxy_add_x_forwarded_for追加当前Nginx的IP。
X-Forwarded-Proto:传递客户端与Nginx连接的协议(http/https)。
X-Forwarded-Host:传递原始请求的主机名。
X-Forwarded-Port:传递原始请求的端口。

此时会将真实的ip地址传到之前创建的tomcat-admin服务器,但是也需要配置tomcat服务器的日志格式文件才能获取到真实ip地址

添加内容
<Valve className="org.apache.catalina.valves.RemoteIpValve" />
pattern="%{X-Real-IP}i ..."

实现真实ip的的传递
4.动静态资源分离
简单来说nginx服务器擅长的是处理静态资源,而tomcat服务器虽然也能处理静态资源但是效率远不如nginx,因此采取动静资源分离能大大提升服务器效率,在最开始的配置当中我们所有的资源全部都是通过nginx服务器代理转到后端tomcat服务器的,因此我们要实现动静资源分离就要将项目中的静态资源交给nginx服务器处理,将所有静态资源都放到nginx服务器上
# 在nginx服务器中添加正则匹配在静态资源里面查找
location ~/.*\.(js|css|png)$ {
root /usr/share/nginx/html/static;
}
# 这里面的static是项目中的静态资源
这样其中的静态资源会直接调用nginx服务器中的静态资源,处理的更加迅速
5.负载均衡
用nginx代理服务器作为转发为后端不同的的服务器

这里配置的两台服务器,如果hosts绑定的域名无法访问就换成ip,若后面没有配置参数就自动轮训数据包到两台服务器
| 参数 | 说明 |
|---|---|
| server | 定义后端服务器的 IP 地址或域名,可选地指定端口号,默认为 80 端口。 |
| weight | 服务器权重,默认为 1。权重越高,处理的请求比例越大。 |
| max_fails | Nginx 尝试连接后端服务器失败的次数,默认为 1。超过此次数,Nginx 将服务器标记为失败。 |
| fail_timeout | 在 max_fails 定义的失败次数后,距离下次检查的间隔时间,默认为 10 秒。 |
| backup | 热备配置,仅当所有激活的服务器失败后,请求才会被转发到标记为 backup 的服务器。 |
| down | 标记服务器永远不可用,通常用于维护或测试。配合 ip_hash 使用时,服务器不能被标记为 down。 |
upstream myserver{
server 192.168.248.130:8080;
server 192.168.248.128:8080 max_fails=3 fail_timeout=20s;
# 启动主动式健康检查,检查时间间隔为10s,超时时间为5s,连续大圩3次认为服务器不可用,连续成功两次认为服务器恢复使用
health_check interval=10s timeout=5s fails=3 passes=2;
}
上述是针对所有服务器配置,health_check只有商业版才有普通版本没有这个模块
6.算法
普通轮询:就是默认配置客户端请求按顺序依次轮流分配给每一台后端服务器,循环往复,所有节点平均分担流量
upstream myserver{
server 192.168.248.130:8080;
server 192.168.248.128:8080;
}
加权轮询:给后端服务器配置weight权重,权重越高,分到的请求比例越大,按照权重比例循环分发流量
upstream myserver{
server 192.168.248.130:8080 weight=3;
server 192.168.248.128:8080 weighe=1;
}
一致性哈希:构建环形哈希空间,客户端 IP 哈希落点后,顺时针匹配最近一台后端节点服务器,新增 / 下线扩容时,只会影响极小部分用户的会话落点,不会出现全集群会话雪崩抖动、
upstream web_pool {
hash $request_uri; # 以客户端请求为URI计算哈希值的ke
server 192.168.22.10:8080;
server 192.168.22.11:8080;
}
ip哈希:根据客户端访问源 IP做固定哈希运算,同一个 IP 永远固定访问同一台后端服务器,可以通过保持会话实现有效信息传递
upstream web_pool {
ip_hash;
server 192.168.22.10:8080;
server 192.168.22.11:8080;
}
最少连接:是动态智能负载均衡策略,Nginx 不会死板按顺序发请求,而是把新请求永远转发给当前后端活跃连接最少、最空闲的服务器。
upstream web_pool {
least_conn; # 开启最少连接策略
server 192.168.22.10:8080 weight=3;
server 192.168.22.11:8080 weight=1;
}
一般配合权重来使用
7.基于nginx的负载均衡
1.OSI参考模型
将网络模型分成了七层架构

上面每一层的作用

2.七层负载
我的理解是客户端对服务器建立TCP连接发送HTTP数据包之后,服务器重新对后端服务器建立一次TCP连接将HTTP数据包以nginx代理服务器对后端服务器重新发起一次请求
而他的配置模式就是之前的负载均衡的配置模式
http {
upstream web_pool {
server 192.168.22.10:8080;
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://web_pool;
}
}
}
3.四层负载
四层负载是服务器仅仅对TCP报文修改他的IP端口之后重新做了一次转发没有建立新的TCP连接,客户端和后端从始至终都是一个TCP连接但是负载均衡服务器做了一次转发
四层负载配置模式就是通过stream{}模块实现的
stream {
upstream backend_tcp {
server 192.168.22.10:8080;
}
server {
listen 80;
proxy_pass backend_tcp;
}
}
http{
...
}
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)