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

nginx反向代理服务器及负载均衡服务配置

一、正向代理与反向代理

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

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

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

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

配置示例:

server {listen       80;server_name  example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

上述配置中,listen指定了Nginx监听的端口,server_name指定了反向代理的域名。

location /表示将所有的请求都转发给后端服务器。proxy_pass配置后端服务器的地址,可以是IP地址或域名。proxy_set_header可以设置一些HTTP头信息,如Host和X-Real-IP等。

二、负载均衡

负载均衡是指将请求分发到多个后端服务器,以达到提高系统的性能和可用性的目的。Nginx支持多种负载均衡算法,如轮询、加权轮询、最少连接等。

配置示例:

upstream backend_servers {server 192.168.0.1:8080;server 192.168.0.2:8080;server 192.168.0.3:8080;server 192.168.0.4:8080;
}server {listen       80;server_name  example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
Nginx支持以下几种负载均衡方式:
  • 轮询(Round Robin):这是默认的负载均衡方式。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  • 权重(Weight):不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此Nginx允许指定每个服务器的处理能力。权重越高,分配的请求越多。
  • IP Hash:每个请求的IP的hash结果分配,每个访客固定访问一个后端服务器,可以解决session的问题。
  • 最少连接(Least Connections):优先分配给当前连接数最少的服务器,适用于请求处理时间相差较大的情况。
  • URL Hash:按照访问URL的hash结果来分配请求,使得每个URL定向到同一个后端服务器,可以在后端服务器生成缓存的情况下提高系统效率。

以上负载均衡方式中,轮询、权重和IP Hash是Nginx内置支持的,最少连接和URL Hash需要使用Nginx的第三方模块,如ngx_http_upstream_least_conn_module和ngx_http_upstream_hash_module。

(1)基于轮询的算法

原理是每一个请求按时间顺序逐一被分发到不同的应用服务器,如果接收请求的应用服务器挂了,并且请求超过最大失败次数max_fails(1次),则在失效时间fail_timeout(10秒)内不会再转发请求到该节点~

upstream defaultReverseProxyServer{server 192.168.0.1:8080; server 192.168.0.2:8080; 
}
(2)基于权重的算法

原理是每一个请求按权重被分发到不同的应用服务器,同样,如果接收请求的应用服务器挂了,并且请求超过最大失败次数max_fails(默认1次或可设置N次),则在失效时间fail_timeout(默认10秒,可设置N秒)内,不会再转发请求到该节点~

upstream weightReverseProxyServer{server 192.168.0.1:8080 weight=10 max_fails=2 fail_timeout=5s;server 192.168.0.2:8080 weight=5 max_fails=2 fail_timeout=5s;
}
(3)基于ip_hash的算法

原理是每一个请求按用户访问IP的哈希结果分配,如果请求来自同一个用户IP则固定这台IP访问一台应用服务器,该算法可以有效解决动态网页中存在的session共享问题。

upstream ipHashReverseProxyServer{ip_hash;server 192.168.0.1:8080;server 192.168.0.2:8080;
}

一般使用的是基于权重的算法,因为现在很多情况下都是集群部署,而且集群下的各个服务器资源大多都是不均匀的,资源高的则分配权重高一些,资源低的则分配权重低一些,这种情况使用基于权重的负载均衡算法,可以更高效的利用资源和提高并发处理能力~

相关文章:

  • test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking
  • Linux | 解决问题Ubuntu重启无法进入系统以及网络无法连接【图文详解】
  • K8S异常处理
  • AR智慧校园三维主电子沙盘系统研究及应用
  • 提升FTP上传速度的方法(提升FTP下载速度的技巧)
  • STM32实战之深入理解I²C通信协议
  • 如何准备一线互联网公司面试?
  • 嵌入式——RTC闹钟Alarm
  • Nginx快速入门:return、rewrite重定向、重写详解(六)
  • 记一次应急响应练习(windows)
  • 企业微信自建应用获取用户信息
  • postman高级用法
  • 5月22日比特币披萨日,今天你吃披萨了吗?
  • 【kafka消息里会有乱序消费的情况吗?如果有,是怎么解决的?】
  • 设计模式-单例模式(结合JVM基础知识)
  • #Java异常处理
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017 年终总结 —— 在路上
  • ES6 ...操作符
  • fetch 从初识到应用
  • gulp 教程
  • JAVA 学习IO流
  • JavaScript服务器推送技术之 WebSocket
  • Python爬虫--- 1.3 BS4库的解析器
  • quasar-framework cnodejs社区
  • React-Native - 收藏集 - 掘金
  • Vue官网教程学习过程中值得记录的一些事情
  • Xmanager 远程桌面 CentOS 7
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 高程读书笔记 第六章 面向对象程序设计
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 目录与文件属性:编写ls
  • 问题之ssh中Host key verification failed的解决
  • 想写好前端,先练好内功
  • 用Visual Studio开发以太坊智能合约
  • 正则与JS中的正则
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)hibernate配置管理
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)WLAN定义和基本架构转
  • (转载)(官方)UE4--图像编程----着色器开发
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .bat文件调用java类的main方法
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 反射 Reflect
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • @Conditional注解详解
  • []指针
  • [20171113]修改表结构删除列相关问题4.txt
  • [Angular 基础] - 自定义指令,深入学习 directive