首页 > 系统相关 >【网站架构部署与优化】nginx反向代理

【网站架构部署与优化】nginx反向代理

时间:2024-09-27 21:50:28浏览次数:8  
标签:负载 架构 请求 Nginx 代理 nginx 反向 服务器

文章目录

nginx反向代理

代理服务器

代理服务器是位于服务端和客户端之间的一层中介服务器。其主要功能是接收客户端的请求,将其转发给服务端,并将服务端的响应返回给客户端。

正向代理与反向代理

  1. 正向代理
    • 为客户端服务。
    • 允许客户端通过代理访问到原本无法直接访问的服务器资源。
  2. 反向代理
    • 为服务端服务。
    • 帮助服务器接收来自客户端的请求,并进行请求转发、负载均衡等操作。

Nginx的负载均衡

  • 实现方式:通过反向代理技术。
  • 工作原理:Nginx作为反向代理服务器,接收客户端请求后,根据预设的调度策略将这些请求分发到多个后端应用服务器进行处理,从而实现负载均衡。

Nginx的动静分离

  • 实现方式:利用location指令匹配用户的访问路径。
  • 工作原理
    • 对于静态资源请求(如图片、CSS、JS文件等),Nginx会直接处理并响应,无需转发到后端服务器。
    • 对于动态内容请求(如数据库查询、业务逻辑处理等),Nginx会通过反向代理将请求转发到相应的后端应用服务器进行处理。

这种动静分离的策略可以显著提高网站的响应速度和整体性能,因为静态资源通常可以直接从缓存或快速存储介质中提供,而无需经过复杂的业务逻辑处理。

七层反向代理

1. 定义与特点
七层反向代理,也称为应用层反向代理,它工作在OSI模型的第七层,即应用层。这种代理方式基于HTTP、HTTPS等七层应用协议进行代理转发,能够根据用户请求访问的URL路径来转发请求。由于它能够理解应用层的数据,因此具有更高的灵活性和更丰富的功能,如负载均衡、缓存、加密解密、URL重写等。
2. 应用场景
七层反向代理通常用于做动静分离、内容缓存、负载均衡等应用场景。通过配置七层反向代理,可以实现将静态内容(如图片、CSS、JS等)和动态内容(如JSP、PHP等脚本生成的内容)分别由不同的服务器处理,从而优化资源利用和提高网站性能。
3. 配置示例
七层反向代理的配置主要包括在http配置块中使用upstream定义后端应用服务器池,以及在server配置块中使用location匹配用户请求的动态资源的URL路径,并通过proxy_pass将请求转发到相应的后端服务器。具体配置示例如下:

http {
    upstream backend {
        server IP1:PORT1 weight=1;
        server IP2:PORT2 weight=1;
        # 可以配置其他调度策略,如轮询、最少连接等
    }

    server {
        listen 80;
        server_name example.com;

        location ~ .*\.jsp$ {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # 其他location配置...
    }
}

四层反向代理

1. 定义与特点
四层反向代理,也称为传输层反向代理,它工作在OSI模型的第四层,即传输层。这种代理方式基于IP和端口进行代理转发,它无法理解应用层的数据,只能根据用户请求的IP地址和端口号来转发请求。由于它工作在较低的层次,因此转发性能更高,适用于需要处理大量TCP/UDP连接的场景。
2. 应用场景
四层反向代理通常用于做网络接入层的负载均衡器、数据库代理等应用场景。它可以快速地将用户的请求转发到后端服务器,而不必关心请求的具体内容,从而提高系统的处理能力和响应速度。
3. 配置示例
四层反向代理的配置需要在Nginx中启用stream模块,并在stream配置块中定义后端应用服务器池和server配置块。具体配置示例如下:

stream {
    upstream backend {
        server IP1:PORT1 weight=1;
        server IP2:PORT2 weight=1;
        # 可以配置其他调度策略,如轮询、最少连接等
    }

    server {
        listen IP:PORT;
        proxy_pass backend;
    }
}

# 注意:这里省略了http配置块,因为它与四层反向代理的配置无关

性能比较:四层反向代理由于工作在较低的层次,转发性能通常比七层反向代理更高。然而,这并不意味着在所有情况下四层反向代理都是最优选择,因为七层反向代理提供了更多的功能和灵活性。
功能比较:七层反向代理能够理解应用层的数据,因此具有更多的功能和灵活性,如负载均衡、缓存、加密解密、URL重写等。而四层反向代理则只能根据IP和端口进行转发,功能相对简单。
总结:在选择Nginx的反向代理类型时,需要根据实际的应用场景和需求来决定。如果需要处理大量TCP/UDP连接或对网络性能有较高要求,可以考虑使用四层反向代理;如果需要更多的功能和灵活性,如动静分离、内容缓存等,则应该选择七层反向代理。

Nginx负载均衡调度策略

Nginx作为一款高性能的HTTP服务器和反向代理服务器,支持多种负载均衡调度策略,以满足不同的应用需求。以下是Nginx常见的负载均衡调度策略及其详细说明:

1. 轮询(Round-Robin, RR)

  • 说明:Nginx默认的负载均衡调度策略。在这种策略下,Nginx会按照时间顺序逐一将请求分配给后端服务器。
  • 特点:简单、平均分配请求,适用于后端服务器性能相近的场景。

2. 加权轮询(Weighted Round-Robin, WRR)

  • 说明:通过为后端服务器设置不同的权重(weight),Nginx会根据权重值来分配请求。权重值越高的服务器被分配请求的概率越大。
  • 特点:适用于后端服务器性能差异较大的场景,可以优化资源利用率和负载均衡效果。

3. 最少连接(Least Connections, least_conn)

  • 说明:Nginx会优先将请求分配给当前连接数最少的后端服务器。如果有多台服务器的连接数相同,则会根据加权轮询策略进行分配。
  • 特点:能够动态地根据服务器的连接数来分配请求,提高服务器的整体性能和响应速度。

4. IP哈希(IP Hash)

  • 说明:Nginx会根据客户端的IP地址进行哈希计算,并将请求分配给固定的后端服务器。这样可以确保来自同一个IP地址的请求始终被发送到同一台服务器。
  • 特点:适用于需要会话保持的场景,但可能导致负载不均衡。

5. URL哈希(URL Hash)

  • 说明:根据客户端请求的URL路径进行哈希计算,并将相同的URL路径的请求分配给固定的后端服务器。需要第三方插件模块支持。
  • 特点:适用于缓存场景,可以确保相同的URL请求被发送到同一台服务器,提高缓存命中率。

6. Fair

  • 说明:根据后端服务器的响应时间(RT)来分配请求,响应时间越短的服务器越优先获得请求。需要第三方插件模块支持。
  • 特点:能够动态地根据服务器的负载情况来分配请求,提高整体系统的响应速度。

7. 随机(Random)

  • 说明:Nginx随机地将请求分配给后端服务器。
  • 特点:适用于对负载均衡要求不高的场景。

8. 一致性哈希(Hash $remote_addr consistent)

  • 说明:基于Nginx全局变量的值(如客户端IP地址)进行一致性哈希计算,将请求分配给对应的后端服务器。
  • 特点:能够在增加或减少服务器时尽量减少重新分配请求的数量,提高系统的可扩展性和稳定性。

Nginx负载均衡实现会话保持

Nginx实现会话保持主要有以下几种方式:

1. 基于IP哈希或URL哈希

  • 通过ip_hash或url_hash策略,将来自同一个IP地址或请求相同URL路径的请求分配给固定的后端服务器。但这种方式可能会导致负载不均衡。

2. 基于Cookie的会话保持(sticky_cookie_insert)

  • Nginx的第三方模块(如nginx-module-vts)支持通过Cookie来实现会话保持。当客户端首次请求时,Nginx会插入一个特定的Cookie,后续请求将根据该Cookie的值来分配后端服务器。

3. 后端应用服务器自身的会话同步机制

  • 通过后端应用服务器(如Tomcat、Jetty等)自身的会话同步机制,配合缓存数据库(如Redis、Memcached等)来实现会话保持。后端服务器在接收到请求时,会先检查缓存数据库中是否有对应的会话信息,如果没有则新建会话并存储到缓存数据库中。

这种方式不需要Nginx进行特殊的配置,但需要后端应用服务器和缓存数据库的支持。

标签:负载,架构,请求,Nginx,代理,nginx,反向,服务器
From: https://blog.csdn.net/Karoku/article/details/142597658

相关文章

  • keepalived+nginx实现高可用的案例详解(主主模式)
    文章目录前言keepalived主备模式和主主模式有什么区别1.主备模式(Master-BackupMode)2.主主模式(Active-ActiveMode或DualMasterMode)主备模式vs主主模式的区别总结:环境案例实现具体步骤ngx1ngx2验证前言keepalived主备模式和主主模式有什么区别Keepali......
  • 架构师-逻辑覆盖
    1.语句覆盖(StatementCoverage)定义:语句覆盖是指测试用例执行了程序中的每一条语句,确保每个语句至少被执行一次。语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句,这里的执行语句不包括头文件、注释、空行等。语句覆盖在多分支的程序中,只能覆盖某一条路......
  • 《华为云DTSE》期刊免费下载:10个案例读懂云上架构升级策略
    本文分享自华为云社区《《华为云DTSE》期刊第四期赋能云专刊,赋能云场景下DTSE服务各类开发者的案例分享》,作者:HuaweiCloudDeveloper。 把公司的开发者平台统一在一起,是华为云所担负的任务,其最终目的是要汇聚开发者、做厚“黑土地”,支撑三大根生态的发展壮大。这也意味着,作为支......
  • 解析 Llama-Factory:从微调到推理的架构
    轻松搞定大模型微调与推理的开源神器©作者|DWT来源|神州问学一、前言:Llama-Factory的背景与重要性在人工智能(AI)领域,尤其是自然语言处理(NLP)技术迅速发展的今天,如何高效地微调和部署大型语言模型(LLM)成为了研究和应用的热点。Llama-Factory作为一个开源的微调框架,正是在......
  • 宝塔Nginx开启fastcgi_cache分别缓存WordPress移动和pc端
    FastCGI_cache是Nginx的缓存模块,能够从Nginx层面实现网页静态化,有效提高网站的并发能力、减少PHP运行时间和请求响应时间,大大提升页面加载速度。Fastcgi_cache能够直接在nginx层面提供缓存内容,而无需涉及PHP或WordPress,在没有第三方广告情况下加速效果很不错!网上不少此教程,但是没......
  • 证券公司结算业务系统信创国产化建设难点及信创总体逻辑架构设计思路
    数字化和国产化是金融IT行业目前的两大趋势。在金融行业,除了数字化以外,国产化也是核心趋势。信创建设从政府办公电脑开始,目的是借助政府的力量培养自主可控生态,而真正的繁荣还要靠行业大客户的支持,其中金融行业是最关键的战略要地。然而,从实际应用案例来看,很多证券公司已在全面推广......
  • PARTV-Oracle实例架构-进程架构
    15.进程架构15.1.进程简介进程是操作系统中可以运行一系列步骤的机制。这个机制取决于操作系统。例如,在Linux上,Oracle后台进程是一个Linux进程。在Windows上,Oracle后台进程是进程内的执行线程。代码模块由进程运行。所有连接到Oracle数据库的用户都必须运行以下模块......
  • 【微服务】一张图搞懂微服务架构设计
    1.前言当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只懂搬砖的程序员不是一个好码农!  2.流量入口Nginx在上图中可以看到,Nginx作为整个架构的流量入......
  • PARTIV-Oracle数据库存储结构-内存架构
    14.内存架构14.1.Oracle是数据库内存结构简介当实例启动时,Oracle数据库会分配一个内存区域并启动后台进程。这个内存区域存储以下信息:程序代码每个已连接会话的信息,即使它当前未活跃程序执行期间需要的信息,例如,正在从中提取行的查询的当前状态锁数据等在进程间共享和通信......
  • 云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大
    本文根据2024云栖大会实录整理而成,演讲信息如下:演讲人:王峰|阿里云智能集团研究员、开源大数据平台负责人李钰|阿里云智能集团资深技术专家范振|阿里云智能集团高级技术专家李劲松|阿里云智能集团高级技术专家蒋乾|七猫免费小说数仓负责人活动:2024云栖大会-开源大数据专场基于......