nginx 反向代理和负载均衡

本贴最后更新于 2287 天前,其中的信息可能已经渤澥桑田

负载均衡的目的是解决单个服务器压力过大,造成 web 响应过慢甚至服务器瘫痪,因为一个 web 服务器同时处理用户的并发量有限。所以在几个服务器上部署同样的程序,实现集群。
模拟服务器集群可以在一台服务器上安装几个 tomcat,修改每个 tomcat 的监听端口。(Server:port、Server > Service > Connector:port (HTTP/1.1 协议)、Server > Service > Connector:port (AJP/1.3 协议))

nginx 负载均衡通过 upstream 模块实现,内置了 3 种策略:

  • 轮询(默认):根据请求次数,将每个请求均匀按权重分配到每台服务器

  • 最少连接:将请求分配给当前连接数最少的服务器,Nginx 会统计哪些服务器的连接数最少

  • IP Hash:根据 IP 绑定处理请求的服务器。第一次请求时,根据该请求 IP 计算出 Hash 值,将请求分配到集群中的某一台服务器上。以后来自改 IP 的所有请求,都将通过 Hash 算法,将请求转发到绑定的服务器上

upstream 模块

server 指令配置处理请求的服务器 IP 或域名,端口可选,可以追加其他配置参数:
weight:权重,数字越大,权重越大,被分配请求的机会越大,默认为 1
max_fails 允许请求失败的次数,超过该次数后,在 fail_timeout 的时间之内,新的请求将不会分配到该机器,默认为 1
fail_timeout:max_fails 次失败后,暂停服务时间,默认为 10s
backup:备份机,所有其他服务器都不可用后才会生效
down:将指定服务器标示为不可用
max_conns:服务器最大连接数,超过后将不会分配新的请求,默认为 0,表示不限制

http { proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; # 设置缓存临时目录 proxy_temp_path /data/proxy_temp_dir; # 设置缓存目录,并设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB proxy_cache_path /data/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g; # 设置代理的后端tomcat集群 upstream web_server { server 192.168.0.102:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.0.103:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.0.104:8080 weight=1 max_fails=2 fail_timeout=30s; } server { location { proxy_pass http://web_server; # 代理的集群名称 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; # 如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移 proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_cache cache_one; # 对不同的HTTP状态码设置不同的缓存时间 proxy_cache_valid 200 304 12h; # 以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内 proxy_cache_key $host$uri$is_args$args; } # 清除缓存,访问http://192.168.0.101/purge/shop/hadoop.html来清除http://192.168.0.101/shop/hadoop.html的页面缓存 location ~ /purge(/.*) { allow 127.0.0.1; allow 192.168.0.0/16; deny all; proxy_cache_purge cache_one $host$1$is_args$args; } # 扩展名以.php、.jsp、.cgi、.jhtml结尾的动态应用程序不缓存 location ~ .*\.(php|jsp|cgi|jhtml)?$ { proxy_pass http://web_server; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_cache cache_one; proxy_cache_valid 200 304 12h; proxy_cache_key $host$uri$is_args$args; } }
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 177 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 4 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 595 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    157 引用 • 289 回帖
  • Anytype
    3 引用 • 31 回帖 • 14 关注
  • gRpc
    11 引用 • 9 回帖 • 89 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 3 关注
  • 倾城之链
    23 引用 • 66 回帖 • 159 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 76 回帖 • 1 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 736 关注
  • Access
    1 引用 • 3 回帖 • 5 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 17 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 541 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 2 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 170 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    182 引用 • 1010 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 487 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 253 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    28 引用 • 197 回帖 • 28 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 679 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    31 引用 • 96 回帖