Nginx应用知识汇总

2023-05-16

一、Nginx是什么?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,对比详情如下所示:

因此,Nginx在互联网项目或网站中广泛应用,比如百度、京东、新浪、网易、腾讯、淘宝等。

二、为什么使用Nginx?

在传统的Web项目中,由于用户访问量少,并发量小,普通的Web服务器(单机部署)能够承受响应的访问压力。所以在低并发的情况下,用户则直接访问Web服务器,然后Web服务器返回消息给用户请求。

用户访问<-->Web服务器

而在互联网项目下,由于用户量大,访问数多,并发量也大,动辄上千万级别的QPS,单台Web服务器肯定无法承受。因单个Tomcat默认并发量有限制。如果请求量过大,会产生如下问题:

  • Tomcat8 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。
  • 当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。
  • 具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
  • 操作系统对于进程中的线程数有一定的限制。
  • Windows 每个进程中的线程数不允许超过 2000。
  • Linux 每个进程中的线程数不允许超过 1000。

(在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。)

虽然Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。

maxThreads="150" 最大并发数

minSpareThreads="10"///初始化时创建的线程数

maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

    因此,无论如何增加单台服务器的硬件配置,始终是有瓶颈。为了能够提升Web服务器的性能,使用Nginx是一种有效的解决方案。

Nginx特点:

高并发、高性能

可扩展性好

高可靠性

热部署

BSD许可证

高并发(High Concurrency)

高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

  • 响应时间(Response Time):系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
  • 吞吐量(Throughput):单位时间内处理的请求数量。
  • QPS(Query Per Second):每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
  • 并发用户数:同时承载正常使用系统功能的用户数量。

高可用(High Availability)

高可用通常来描述一套软件系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。(一直都能用 99.9999%)

高性能

高性能是指软件系统所设计的服务响应时间快,(CPU/处理器/内存)特别是在高并发下响应时间不会急剧增加。

三、Nginx的作用是什么?

1、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型

2、作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

3、作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

 

四、Nginx的应用场景

  1. Nginx-反向代理

基于HTTP请求:客户端向服务器端请求

    (1)基本概念及示意图

正向代理:所有客户端(client)统一请求代理(proxy)客户端,再由代理客户端向真实服务器发起请求。所有客户端与代理(proxy)客户端处于同一局域网(LAN);

反向代理:所有客户端(client)统一请求代理(proxy)服务器,再由代理服务器向业务服务器发起请求。代理服务器与真实的业务服务器处于同一局域网(LAN);

  (2)为什么使用反向代理

  • 可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器。
  • 通过缓存静态资源,加速Web请求。
  • 实现负载均衡。顺便说下,目前市面上,主流的负载均衡方案,硬件设备有F5,软件方案有四层负载均衡的LVS,七层负载均衡的Nginx、Haproxy等。

  (3)反向代理示意图

说明:在实际项目应用中,Tomcat服务器一般不单独使用在项目中,我们一般通过Nginx用于反向代理的服务器,并将请求转发给后端多台Tomcat服务器,从而达到负载均衡的目的。

    2.Nginx-负载均衡

   (1)负载均衡作用

  • 转发功能

按照一定的算法,比如权重、轮询,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。

  • 故障移除

通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器宕机,自动将用户请求发送到其他应用服务器。

  • 恢复添加

如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

   (2)负载均衡分配服务器的常用策略

  • 轮询(默认):按顺序,如果某个服务器没了,则访问其他服务器。
  • 权重:根据权重分配服务器,权重越大,分配访问该服务器的可能性就越大。
  • ip_hash:一个ip固定一个服务器的访问,根据ip的hash结果分配,可以解决session问题。
  • fair:按照服务器的响应时间来分配,响应时间短分配越快。
  • url_hash:一个url固定一个服务器的访问,根据url的hash结果分配。

    3.Nginx-动静分离

    (1)什么是动静分离

        在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开到不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。

        比如:可以将 html 页面,css样式,js文件,以及图片文件等静态页面放 Nginx 服务器中,然后把动态请求显示的文件放 Tomcat这样的容器服务器;

   (2)Nginx动静分离处理方式

Nginx处理静态页面,Tomcat处理动态页面
动静分离有两种方案:

一种是把静态文件独立成单独域名,用单独的服务器处理
一种是动静态混合,使用nginx服务器将其分开

 

location中不同后缀名实现不同请求的转发

  4.nginx-高可用集群

(1)为什么需要搭建Nginx集群?

为了防止Nginx单点故障造成服务器瘫痪。

(2)集群方案

Keepalived + Nginx 配合使用

当前有两台或多台Nginx服务器,但是他们的ip不同,这样不好提供给客户端,于是会使用一个虚拟 ip,比如 192.168.0.105,作为暴露给客户端的 ip 去访问。

当主服务器挂了之后,会自动切换到备用服务器代替主服务器工作。

当中使用到一个 keepalive 软件(将虚拟ip与alive的ip进行绑定,主服务器异常,keepalive自动重新将虚拟ip绑定至备服务器ip),会检测服务器状态,当异常会自动切换至正常的nginx服务器。

五、Nginx某项目应用案例架构图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx应用知识汇总 的相关文章

  • 一个简单的SHELL脚本模板

    一个简单的SHELL脚本模板 xff0c 适用于Java项目的启动 xff0c 停止 xff0c 重启 如果在windows上编辑 xff0c 请使用Notepad 43 43 设置编码格式为UTF 8无BOM编码 xff0c 脚本的文档格
  • Python 打印购物小票

    打印购物小票 需求 xff1a 指定折扣输入购买商品单价与数量 顾客交费结算时打印购物小票 xff0c 计算此次购物总金额 xff0c 顾客交费 xff0c 商店找补 xff0c 以及购物积分钱不够时 xff0c 提醒顾客继续交钱只给三次交
  • 创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录...

    yum服务器lvm扩容 xff0c data目录是yum存放rpm包的目录 xff0c 只有20G xff0c 需要添加磁盘扩容到80G df lh Filesystem Size Used Avail Use Mounted on dev
  • 暑假实训的体会与感受_11-java-张玥

    暑假实训的体会与感受 我校为了丰富学生的社会经验 xff0c 暑假制定了实训计划 暑假实训 对我来说是很陌生的 xff0c 到大学以来我第一次接触 xff0c 当时知道这个通知的时候并不是很感兴趣 xff0c 实训完之后才知道真是博大精深啊
  • 这是一个失败的程序员

    写程序至今 xff0c 未入门 xff0c 什么都不懂 xff01
  • 【软,码】完成并发布FLV播放器

    经过一天的努力 xff0c 终于完成了FLV播放器的优化工作 xff0c 并于刚才 xff08 2007年8月5日 9点一刻 xff09 发布成功了 除发布在本站以外 xff0c 在华军也放了一个 暂时命名为 红鱼X的FLV播放器 xff0
  • 【翻】【官方文章】完整的Flash Object参考

    这篇参考翻译自Adobe官方网站提供的技术说明 xff08 点击到官方参考 xff09 并在文末添加了文中未指明的重要信息 内容如下 xff1a 涵盖的内容 xff1a 一 必须的属性 xff1b 二 可选的属性 xff1b 三 活动内容J
  • 【软,码】发布XML/(X)HTML文本化工具

    刚才本来打算把这个工具的代码贴在这里的 xff0c 可是忙活了半天 xff0c 却没有贴成功 xff0c 真让人泄气 来CSDN NET安家是这两天的事情 xff0c 还不是太熟悉它的操作环境 只好再熟悉一下 xff0c 慢慢来了 这是一款
  • 决定总结使用纯C/C++进行Windows编程

    一直以来都很想使用单纯的方式编写Windows应用程序 xff0c 却不可得 xff0c 因为虽然杂七杂八地看了一些Windows API 编程的资料 xff0c 却太零散 xff0c 一到要用的时候就有种大脑裂开的感觉 xff0c 最后只
  • Android 状态栏和导航栏的终极解决方案 最终版

    缘起 我对 Android 的状态栏和导航栏一直有种情结 xff0c 在我做 Android 开发之前 xff0c 我就喜欢通过一些 Xposed 插件来让状态栏和导航栏变色或者透明 xff0c 以消除那丑丑的两个黑条 从 fitsSyst
  • 【软,码】.NET内容协商模块

    为了让我们编写的符合W3C标准的网站精确地服务于客户 xff0c 我们常常需要根据客户使用的浏览器代理类型向客户发送不同的Content Type类型 要做到这一点 xff0c 方案有多种 比较简单的是在页面逻辑中判断客户代理的支持类型 x
  • 我发布的资源列表

    为了方便朋友们查看 xff0c 我特把我发布的所有资源的做成这个列表 您可以从该列表的链接去查看并下载 JS 43 XML X HTML源码 1 红鱼X的FLV 播放器 2007 08 05 2 XML X HTML 文本化工具 2007
  • Java技术世界真是乱!

    从前一直有个心愿 xff0c 就是希望有朝一日彻底放弃 NET xff0c 然后去追随Java 今天想想 xff0c 真不知道我这心愿是不是对的 之所以想离开 NET而转向Java xff0c 原因当然是不甘心于被微软锁死在Windows平
  • 【翻】【英汉对照】【完整官方参考】Windows媒体播放器11 SDK 播放器对象模型(一)

    说明 要看原始参考 xff0c 请到http msdn2 microsoft com en us library aa393405 aspx Windows媒体播放器对象模型 本微软Windows媒体播放器ActiveX控件对象模型提供使开
  • 【翻】【英汉对照】【完整官方参考】Windows媒体播放器11 SDK 播放器对象模型(二)

    说明 要查看原始页面 xff0c 请到http msdn2 microsoft com en us library aa384855 aspx 关于本播放器对象模型 微软Windows媒体播放器控件是一个使用微软COM技术的标准Active
  • 白忙活一场

    前天晚上好不容易挤出时间翻译Windows媒体播放器11 SDK 播放器对象模型 xff08 三 xff09 xff0c 可是翻译了三分之一之后 xff0c 当要以草稿方式保存的时候 xff0c 却始终无法提交到站点上 xff0c 最后刷新
  • 配置并上传FCKEditor.net

    前天使用CSDN翻译文章 xff0c 翻译了一大部分 xff0c 可是最终因为没能上传成功而报废 那时候真的很郁闷 xff01 于是决定在自己的系统上配置和CSDN用的Web编辑器一样的一个FCKEditor系统 xff0c 再写文章的时候
  • 在 ASP.NET 中执行 URL 重写

    发布日期 xff1a 8 23 2004 更新日期 xff1a 8 23 2004 Scott Mitchell 4GuysFromRolla com 适用范围 xff1a Microsoft ASP NET 摘要 xff1a 介绍如何使用
  • 我的近况(随时更新)

    2007年9月23日 最近在开发ASP NET Web服务器 xff0c 因为使用IIS 太受限制了 xff0c 要升级还得升级操作系统 现在的开发阶段为内核开发 xff0c 已经完成基本的开发 xff0c 还没有包装起来
  • adb dumpsys命令用法

    dumpsys命令功能很强大 xff0c 能dump系统服务的各种状态 xff0c 非常有必要熟悉该命令的用法以及含义 一 概述 1 1 dumpsys命令用法 可通过dumpsys命令查询系统服务的运行状态 对象的成员变量属性值 xff0

随机推荐