nginx反向代理动静分离和负载均衡

一.nginx 反向代理简要介绍

1.什么是反向代理

反向代理是一种服务器,在这种设置中,代理服务器接收客户端的请求,并将这些请求转发给一个或多个后端服务器(例如应用服务器、数据库服务器等)。然后,后端服务器处理这些请求并将响应返回给代理服务器,代理服务器再将响应传递给客户端。

2.nginx作为反向代理的优势

  1. 负载均衡:Nginx 可以在多个后端服务器之间分发客户端请求,从而平衡负载,防止单一服务器过载。
  2. 缓存:Nginx 可以缓存静态内容和动态内容,加速响应时间并减少对后端服务器的压力。
  3. 安全性:通过隐藏后端服务器的真实 IP 地址,提高了系统的安全性。
  4. SSL 终止:Nginx 可以处理 SSL/TLS 加密,减轻后端服务器的负载。
  5. 健康检查:Nginx 可以自动检查后端服务器的健康状态,并将请求路由到健康的服务器上。

3.关键指令说明

  • upstream:定义一个名为 backend 的上游服务器组,这里包含了两个后端服务器 backend1.example.com 和 backend2.example.com
  • server:定义一个虚拟主机,这里监听 80 端口,并且处理 www.example.com 的请求。
  • location /:处理所有根路径下的请求。
    • proxy_pass:指定请求应被转发到上游服务器组 backend
    • proxy_set_header:设置一些头信息,例如原始的 Host 字段、客户端的真实 IP 地址 (X-Real-IP),以及代理链 (X-Forwarded-For) 等。

4.负载均衡策略

Nginx 支持多种负载均衡策略,如:

  • 轮询 (Round Robin):默认策略,将请求依次分发到每个后端服务器。
  • 权重 (Weight):根据配置的权重值来分发请求。
  • IP 哈希 (IP Hash):基于客户端 IP 地址进行哈希,每个 IP 地址固定分配到某个后端服务器。
  • 最少连接 (Least Connections):将请求分发到当前连接数最少的服务器。

5.反向代理模块

ngx_http_proxy_module: #将客户端的请求以http协议转发至指定服务器进行处理     7层代理  
ngx_http_upstream_module #用于定义为proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后端服务器分组      负载均衡 
ngx_stream_proxy_module:#将客户端的请求以tcp协议转发至指定服务器处理    4层代理
ngx_http_fastcgi_module:#将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module: #将客户端对Python的请求以uwsgi协议转发至指定服务器处理

6.反向代理配置参数

Module ngx_http_proxy_module官方文档

7.指令语法

Syntax:    proxy_pass URL;
Default:    —
Context:    location, if in location, limit_except

proxy_pass; 
#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP地址:端口的方式
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持

8.示例

在192.168.240.10上编写子配置文件

yum安装子配置文件路径/usr/local/nginx/conf.d/(conf.d需要创建)

在另一台主机192.168.240.11上安装http服务,新建一个网页

在真机上访问192.168.240.10

二.nginx动静分离简要介绍

Nginx 动静分离是一种常见的性能优化技术,它将处理静态资源和动态请求的责任分配给不同的服务器或者服务进程,以提高网站的性能和吞吐量。下面是一个简要介绍:

  1. 静态资源和动态请求: 在网站中,通常有两种类型的请求:静态资源请求和动态请求。静态资源包括图片、CSS 文件、JavaScript 文件等,它们的内容在请求时不会改变。而动态请求则是由服务器生成的动态内容,如 PHP、Python、Java 等后端语言生成的页面。

  2. 传统架构的问题: 在传统的架构中,静态资源和动态请求都由同一个服务器处理。但是这样会导致服务器负载过高,因为动态请求通常需要更多的计算和数据库访问。此外,每个请求都会占用服务器的线程或进程,限制了并发处理能力。

  3. 动静分离原理: 动静分离通过将静态资源交给专门的服务器或者服务进程来处理,从而减轻动态请求对主服务器的压力。通常,Nginx 作为反向代理服务器,可以配置多个反向代理规则,将静态资源的请求转发给专门的静态资源服务器,而动态请求则继续由主服务器处理。

  4. 优势和好处: 动静分离的优势在于提高了网站的性能和可扩展性。静态资源可以被缓存,减少了服务器的访问次数,加快了页面加载速度;而动态请求则可以由专门的后端服务器处理,提高了并发处理能力和响应速度。

示例:

1.在代理服务器192.168.240.10上编写子配置文件

vim   /usr/local/nginx/conf.d/djfl.conf

2.在192.168.240.11和192.168.240.13真实服务器上安装nginx服务,制作网页

访问192.168.240.10

在/usr/share/nginx/html下

curl 192.168.240.10/api  -L
curl 192.168.240.10/static  -L

三.负载均衡

1. 基本概念

Nginx负载均衡通过将客户端请求分发到多个后端服务器(upstream servers),从而提高系统的响应速度和可靠性。

2. 配置示例

http {

upstream backend {

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}

server {

listen 80;

location / {

proxy_pass http://backend;

         }

     }

}

在上述示例中,upstream块定义了一个名为backend的服务器组,其中包含三个后端服务器。proxy_pass指令用于将请求转发到该服务器组。

3. 负载均衡算法

Nginx支持多种负载均衡算法,包括:

  • 轮询(Round Robin):默认算法,按顺序将请求分配给每个后端服务器。

  • 加权轮询(Weighted Round Robin):可以根据服务器的权重来分配请求,例如:

upstream backend { 
server backend1.example.com weight=3; 
server backend2.example.com weight=1; 
}
  • 最少连接数(Least Connections):将请求分配给当前处理连接数最少的服务器。

upstream backend { 
least_conn; 
server backend1.example.com; 
server backend2.example.com; 
}
  • IP哈希(IP Hash):根据客户端IP地址来分配请求,使同一个IP地址的请求总是被分配到同一台后端服务器。

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

4. 健康检查

Nginx Plus(商业版)提供高级的健康检查功能,但开源版本也可以通过一些第三方模块或自定义脚本来实现基本的健康检查。例如,可以使用proxy_next_upstream指令处理后端服务器故障:

http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
} 
server { listen 80;
location / { 
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_pass http://backend; } } 
}

5.会话保持

Nginx支持会话保持(Session Persistence),确保用户的请求被分配到同一台后端服务器。可以通过sticky模块实现,该模块需要第三方插件支持:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LinkedList与链表】

目录 1,ArrayList的缺陷 2,链表 2.1 链表的概念及结构 2.2 链表的实现 2.2.1 无头单向非循环链表实现 3,LinkedList的模拟实现 3.1 无头双向链表实现 4,LinkedList的使用 4.1 什么是LinkedList 4.2 LinkedList的使用 5…

上位机图像处理和嵌入式模块部署(h750 mcu和ad/da电路)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大部分同学学习mcu的时候,都会把重点放在232、485、can、usb、eth这些常规的通信接口上面。还有一部分同学,可能会对lcd、c…

Codeforces Round 953 (Div. 2 ABCDEF题) 视频讲解

A. Alice and Books Problem Statement Alice has n n n books. The 1 1 1-st book contains a 1 a_1 a1​ pages, the 2 2 2-nd book contains a 2 a_2 a2​ pages, … \ldots …, the n n n-th book contains a n a_n an​ pages. Alice does the following: She …

【HTML01】HTML基础-基本元素-附带案例-作业

文章目录 HTML 概述学HTML到底学什么HTML的基本结构HTML的注释的作用html的语法HTML的常用标签:相关单词参考资料 HTML 概述 英文全称:Hyper Text Markup Language 中文:超文本标记语言,就将常用的50多个标记嵌入在纯文本中&…

RabbitMQ 入门

目录 一:什么是MQ 二:安装RabbitMQ 三:在Java中如何实现MQ的使用 RabbitMQ的五种消息模型 1.基本消息队列(BasicQueue) 2.工作消息队列(WorkQueue) 3. 发布订阅(Publish、S…

【论文阅读】Multi-Camera Unified Pre-Training via 3D Scene Reconstruction

论文链接 代码链接 多摄像头三维感知已成为自动驾驶领域的一个重要研究领域,为基于激光雷达的解决方案提供了一种可行且具有成本效益的替代方案。具有成本效益的解决方案。现有的多摄像头算法主要依赖于单目 2D 预训练。然而,单目 2D 预训练忽略了多摄像…

【深度学习】GPT-3,Language Models are Few-Shot Learners(一)

论文: https://arxiv.org/abs/2005.14165 摘要 最近的研究表明,通过在大规模文本语料库上进行预训练,然后在特定任务上进行微调,可以在许多NLP任务和基准上取得显著的进展。虽然这种方法在结构上通常是任务无关的,但…

走进Web3时代的物联网领域:科技的无限可能

随着Web3技术的迅速发展,物联网(IoT)领域正迎来一场深刻的变革。本文将深入探讨Web3时代如何重新定义物联网的边界和未来发展的无限可能性,从技术原理到应用案例,为读者呈现一个充满挑战和机遇的全新科技景观。 1. Web…

mediasoup源码分析(三)channel创建及信令交互

mediasoup源码分析--channel创建及信令交互 概述跨职能图业务流程图代码剖析 概述 在golang实现mediasoup的tcp服务及channel通道一文中,已经介绍过信令服务中tcp和channel的创建,本文主要讲解c中mediasoup的channel创建,以及信令服务和medi…

如何避免接口重复请求(axios推荐使用AbortController)

前言: 我们日常开发中,经常会遇到点击一个按钮或者进行搜索时,请求接口的需求。 如果我们不做优化,连续点击按钮或者进行搜索,接口会重复请求。 以axios为例,我们一般以以下几种方法为主: 1…

【Pmac】PMAC QT联合开发中各种可能遇到的坑

目录 1. 错误 C2027 使用了未定义类型“PCOMMSERVERLib::DEVUPLOAD”2. 输入了正确的pmac的ip地址,没有显示可选的pmac设备3. Pmac DTC-28B无读数 使用QT编写PMAC上位机程序时,利用QT中的dump工具可以将pcommserver.exe转化为pcommserverlib.h和pcommser…

调度算法-内存页面置换算法

缺⻚异常(缺⻚中断) 与⼀般中断的主要区别在于: 缺⻚中断在指令执⾏「期间」产⽣和处理中断信号,⽽⼀般中断在⼀条指令执⾏「完成」后检查和处理中断信号。缺⻚中断返回到该指令的开始重新执⾏「该指令」,⽽⼀般中断返…

【HarmonyOS】鸿蒙应用模块化实现

【HarmonyOS】鸿蒙应用模块化实现 一、Module的概念 Module是HarmonyOS应用的基本功能单元,包含了源代码、资源文件、第三方库及应用清单文件,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用通常会包含一个或多个Module,因此&am…

我主编的电子技术实验手册(08)——串联电阻分压

本专栏是笔者主编教材(图0所示)的电子版,依托简易的元器件和仪表安排了30多个实验,主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】,精心设计的【实验步骤】,全面丰富的【思考习…

Golang——gRPC认证和拦截器

一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包,用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现,并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件: openssl:多用途的命…

有效招聘营销策略的六个组成部分

任何想吸引更多人购买其产品的公司都必须投资于市场营销。然而,当涉及到让更多的人了解公司的工作时,许多有效的营销活动可能不是招聘团队的首要考虑因素。为了超越招聘委员会上的“发布祈祷”策略,有必要包括有效招聘营销策略的所有组成部分…

车联网车载设备

智能网联主要通过OBU(On Board Unit,车载单元)实现。OBU是一种安装在车辆上用于实现V2X通信的硬件设备,可实现和其他车辆OBU(PC5)、路侧RSU(PC5)、行人(PC5)和V2X平台&am…

基于Redis实现共享session登录

搭配食用:Redis(基础篇)-CSDN博客 项目实现前的 Mysql中的表: 表说明tb_user用户表tb_user_info用户详情表tb_shop商户信息表tb_shop_type商户类型表tb_blog用户日记表(达人探店日记)tb_follow用户关注表tb_voucher优…

if/case条件测试语句

一 条件测试 1.1返回码 $? $? 返回码 用来哦按段命令或者脚本是否执行成功 0 true为真就是成功成立 非0 false 失败或者异常 1.2 test 命令 可以进行条件测试 然后根据返回值来判断条件是否成立 -e :exist 测试目录或者目录是否存在 -d : director…

【产品经理】订单处理6-审单方案

电商系统中订单管理员会对特殊类型的订单进行审核,普通订单则自动审核,本节讲述自动审单方案、手动审单以及加急审单。 一、自动审单 自动审单方案可按照方案形式制定,可一次性制定多套审单方案。 1. 审单通过条件有 执行店铺&#xff…