当前位置: 首页 > article >正文

Nginx的反向代理与负载均衡

概念介绍

1). 正向代理

正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。

正向代理一般是在客户端设置代理服务器,通过代理服务器转发请求,最终访问到目标服务器。

2). 反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。

那么在本小节,我们就是要使用nginx来作为反向代理服务器使用。 在nginx中,我们可以在nginx.conf中配置反向代理:

server {
    listen 82;
    server_name localhost;
    
    location / {
        proxy_pass http://192.168.200.201:8080;     #反向代理配置,将请求转发到指定服务
    }
}

上述配置的含义为:

我们访问nginx的82端口时:根据反向代理配置,会将请求转发到 http://192.168.200.201:8080 对应的服务上。

6.3.2 测试

需求: 在192.168.200.201这台服务器中部署了java应用,运行端口为8080,并提供了一个可访问的链接 /hello。现在我们需要在访问nginx的82端口时,通过nginx将请求转发到192.168.200.201:8080的服务。

1). 在192.168.200.201部署服务并启动

安装JDk
配置环境变量:JAVA_HOME

将资料中提供的 helloworld-1.0-SNAPSHOT.jar 上传到服务器端,并通过指令 java -jar helloworld-1.0-SNAPSHOT.jar 运行服务。

2). 在192.168.200.200中的nginx.conf中配置反向代理

进入nginx的安装目录,并编辑配置文件nginx.conf:

cd /usr/local/nginx/conf/
vim nginx.conf

在http块中,再添加一个server块虚拟主机的配置,监听82端口,并配置反向代理proxy_pass:

server {
    listen 82;
    server_name localhost;
    location / {
        proxy_pass http://192.168.200.201:8080;     #反向代理配置,将请求转发到指定服务
    }
}

3). 检查配置文件,并重新加载

nginx -t

nginx -s reload

4). 访问

==关闭防火墙==

systemctl stop firewalld

6.4 负载均衡

6.4.1 概念介绍

早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。

应用集群:将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据

负载均衡器:将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理

有两种实现方式:
1、通过软件的形式来选择使用哪一个服务器(Nginx)
2、硬件也可以帮助实现负载均衡(F5)
​
2019年,F5 networks收购Nginx

此处的负载均衡器,我们将会使用Nginx来实现,而Nginx的负载均衡是基于反向代理的,只不过此时所代理的服务器不是一台,而是多台。

6.4.2 测试

1). 将资料中提供的两个jar包,上传到192.168.200.201服务器上

我们在测试时,并没有那么多服务器,我们可以在一台服务器中启动多个服务,运行在不同的端口号上进行测试。

2). 运行上传上来的两个jar包,运行端口分别是 8080 , 8081

由于我们执行 java -jar 指令会占用前台窗口,所以我们可以开启两个窗口进行测试。

验证:

http://192.168.200.201:8080/hello

http://192.168.200.201:8081/hello

3). 在nginx中配置负载均衡

打开nginx的配置文件nginx.conf并增加如下配置:

#upstream指令可以定义一组服务器
#负载均衡
upstream targetserver{  
    server 192.168.200.201:8080;
    server 192.168.200.201:8081;
}
​
server {
    listen       8080;
    server_name  localhost;
    location / {
        #反向代理配置
        proxy_pass http://targetserver; 
    }
}

具体的配置位置如下:

4). 重新加载nginx配置文件,访问

nginx -s reload

测试时,我们直接访问nginx的8080端口(http://192.168.200.200:8080), 此时nginx会根据负载均衡策略,将请求转发到后面的两台服务器。

在上述的测试过程中,我们看到请求均衡的转发到了8080和8081,因为模式的负载均衡策略是轮询。

注意: 上述所有涉及到的端口号,都需要在对应的服务器的防火墙中开放,或者彻底关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
6.4.3 负载均衡策略

处理上述默认的轮询策略以外,在Nginx中还提供了其他的负载均衡策略,如下:

名称说明特点
轮询(round_robin)默认方式
weight权重方式根据权重分发请求,权重大的分配到请求的概率大
ip_hash依据ip分配方式根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上
least_conn依据最少连接方式哪个服务器当前处理的连接少, 请求优先转发到这台服务器
url_hash依据url分配方式根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上
fair依据响应时间方式优先把请求分发给处理请求时间短的服务器

权重的配置:

#upstream指令可以定义一组服务器
upstream targetserver{  
    server 192.168.200.201:8080 weight=10;
    server 192.168.200.201:8081 weight=5;
}

上述配置的weight权重是相对的,在上述的配置中,效果就是,在大数据量的请求下,最终8080接收的请求数是8081的两倍


http://www.kler.cn/news/160621.html

相关文章:

  • 人工智能学习8(集成学习之xgboost)
  • 配置和管理VLAN
  • 探究Spring Boot 中实现跨域的几种方式
  • 基因名潘多拉
  • 编程应用实例,养生馆会员管理系统软件统计查询教程
  • 制作飞腾(arm)芯片架构的nexus镜像
  • 朝花夕拾华山平台流水账
  • 智慧景区(园区)数字孪生可视化GIS解决方案
  • Linux自启服务提示:systemd[1]: *.service: main process exited, code=exited, status=1问题
  • 创建Vue2项目,引入chart.js,并生成柱形图
  • gradle 启动报错,CreateProcess error=206, 文件名或扩展名太长
  • html css样式选择器介绍
  • uniapp使用v-html调用接口,富文本图片 视频自适应大小
  • 微信小程序:chooseimage从本地相册选择图片或使用相机拍照
  • DAPP开发【06】nodejs安装与npm路径更换
  • NDK交叉编译工具链使用教程
  • 日常开发日志
  • Shopify二次开发之五:元字段(Metafields)
  • 2023年山东省职业院校技能大赛信息安全管理与评估二三阶段样题
  • nodejs微信小程序+python+PHP新闻发布系统的设计与实现-计算机毕业设计推荐
  • prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
  • 什么是高防IP,高防IP该如何选择。
  • Stable Diffusion AI绘画系列【18】:东方巨龙,威武霸气
  • 直播录屏软件哪个好?这3款软件请你收好
  • 简单使用selenium抓取微博热搜话题存储进Excel表格中
  • TTS声音合成:paddlespeech、sherpa-onnx、coqui-ai
  • 机器学习笔记 - 如何在Python中对网格和点云进行体素化?
  • 【CSP】202209-1_如此编码Python实现
  • 2022年第十一届数学建模国际赛小美赛B题序列的遗传过程解题全过程文档及程序
  • 有关thingsboard中 api的 jwt研究