前端应该了解的nginx

本文详细介绍了nginx的反向代理、负载均衡和静态资源缓存等功能,阐述了nginx在处理高并发、提升性能中的作用。通过历史背景分析,揭示了nginx诞生的原因,以及其在web服务器市场中的重要地位。此外,还介绍了如何在mac上安装和配置nginx,以及开启gzip压缩。通过proxy_pass和upstream实现负载均衡,最后对比了正向代理与反向代理的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反向代理

反向代理说起来也很简单,比如你拨打一个电话号码,对方问你要找谁,然后帮你转接到对应的人的分机上。每个人拨打的都是相同的号码,但也都会通过转接找到对应的人,如果有人拨打错了,也会有友好的提示。

你没有直接拨打对应人的号码,而是拨打了统一转接人的电话,这个人所做的事情就是反向代理, 反向代理是他会把你的问题转述给对应的人,并且把对应人的回答再转述给你。

反向代理对服务器的要求很高,nginx是这方面的专家,所以大部分我们的服务器都使用nginx作为入口服务器,起到门卫的作用。

举例来说一个web请求走进服务首先会经过nginx,然后由nginx转发到对应的应用服务器。比如你想访问一张图片,你首先进入到nginx,nginx通过你想要的图片路径到对应的图片服务器拿到这张图片,再返回给你。

为什么会有反向代理呢?因为我们的应用服务由于要求开发效率非常的高,所以他的运行效率是很低的,他的qbs,tps并发都是受限的,在处理业务的同时很难兼容处理用户的请求。

一般这种情况我们会搭建很多台服务,组成一个集群,向用户提供高可用性。正是因为很多服务构成集群的时候,这么多台服务暴露的地址不同,才需要nginx具有反向代理的功能,可以把请求传导给应用服务。而用户面临的只是nginx一台服务的地址。

对于用户的请求收口在nginx层也可以提高网站的安全性和便宜性。假设我们想要修改接口的响应头,只需要修改nginx就可以了,而不需要每台服务都去修改,想要停止服务访问,也只需要关掉nginx, 不需要每台服务都去关闭。

负载均衡

负载均衡是用来解决大流量问题,因为每台服务器可承受的访问量是有限的,随着公司的发展访问量会越来越大,这个时候我们会选择通过增加服务器的方式来平衡每台服务器所受的压力。

前面也说了我们的应用服务因为要求开发效率非常的高,所以他的运行效率是很低的,他的qbs,tps并发都是受限的,所以我们需要把很多这样的应用服务组成一个集群,向用户提供高可用性。

而每一次web请求进来,nginx都可以选择一台压力较少的服务器,然后将请求发送给这台服务进行处理。这就是负载均衡。

在服务领域一旦很多应用服务构成集群,他一定会带来两个需求,第一个需求我们需要动态的扩容,我们在增加一台服务器的时候,不可能关闭网站,让网站停止使用,他一定是一个无感知的过程,这就是动态扩容nginx是支持的。也就是你可以不关闭的情况下增加一台服务。

第二个则是有些服务出问题的时候我们需要做容灾,假设我们的服务器集群中一台服务器出现了问题,是不应该影响用户访问的,nginx会把请求发送给其它正常的服务器保证线上用户的正常使用。

静态资源缓存

在一个链路中,nginx是处在企业内网的一个边缘节点,也就是网站的最外层,所有的请求和访问都是由nginx做转发,这样随着我们网络链路的增长,用户体验到的时延会增加。

所以如果我们能把一些所有用户看起来不变的,或者在一段时间内看起来不变的动态内容缓存在nginx中,由nginx直接向用户提供访问,那这样用户的时延就会减少很多。

所以反向代理会衍生出另外一个功能叫缓存,他能够加速我们的访问,而很多时候我们在访问像css或者js文件,或者这样一些小图片,那么这样静态的资源是没有必要由应用服务来访问的,他只需要通过本地文件,系统上放置的静态资源,直接由nginx提供访问就可以。这是nginx的静态资源功能。

nginx 出现的历史背景

在我看来nginx出现的原因主要有三个。

第一个是互联网上数据的快速增长,这主要是全球化和物联网的快速发展,导致接入互联网中的人与设备的数量都在快速的上升,数据的快速爆炸对我们硬件性能提出很高的要求。

而提到硬件大家都知道摩尔定律,之前我的服务跑在1GHZ的CPU上,当一年半以后我更新到2GHZ的CPU时,我可以预测到我的服务会有两倍的性能提升。

但是到了本世纪初,摩尔定律在单颗CPU的频率上已经失效了,CPU开始向着多核方向发展,这个时候当你的服务器现在是跑在8核CPU上时,一年半以后你换到了16核的CPU,你的服务的性能通常是不会有一倍的提升的。

那么这些性能究竟损耗在哪里呢,在我看来主要是操作系统和大量的软件没有做好服务于多核架构的准备,比如说像Apache,在我看来Apache是低效的,因为他的架构模型里一个进程同一时间只会处理一个连接一个请求。只有在这个请求处理完以后才会去处理下一个请求。

这有什么潜台词呢,它实际上在使用操作系统的进程间切换的特性,因为操作系统微观上只有有限的CPU,但是操作系统被设计为同时服务于数百甚至上千的进程。

而Apache一个进程只能服务于一个连接,这样的模式会导致当Apache需要面对几十万,几百万连接的时候,他没有办法去开几百万的进程,而进程间切换的代价成本又太高啦。

当我们并发的连接数越多,这种无谓的进程间切换引发的性能消耗又会越大。

nginx是专门为了这样的应用场景而生的,nginx可以处理数百万甚至上千万的并发连接,nginx目前在web市场份额中排行第二,在过去几年他增长极度迅速,在不久的将来nginx在web端的应用将远远超过其他服务器。

安装nginx

我们这里以mac电脑进行举例。

首先我们需要下载nginx,打开http://nginx.org/这个网址在页面中我们找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值