深入了解Nginx:高性能的开源Web服务器与反向代理

一、Nginx是什么

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式,能够处理大量并发连接和高流量负载,同时保持低内存消耗和高性能。在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。Nginx支持热部署,启动简单,可以做到7*24不间断运行,几个月都不需要重新启动。中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

二、Nginx的反向代理(扩展:正向代理)

首先,看一张关于正向代理和反向代理的图片

正向代理(Forward Proxy)和反向代理(Reverse Proxy)是网络代理服务器的两种常见类型,它们在网络通信中起到不同的作用。

  1. 正向代理(Forward Proxy): 正向代理是位于客户端和目标服务器之间的代理服务器。当客户端需要访问互联网上的资源时,它发送请求给正向代理服务器,然后由代理服务器代表客户端向目标服务器发送请求,并将响应返回给客户端。

主要特点和用途:

  • 客户端感知不到代理服务器的存在,它只知道和代理服务器进行通信。
  • 正向代理常用于加密和保护客户端的隐私,隐藏客户端的真实IP地址,以及访问被限制的资源。
  • 举例:在企业网络中,如果员工需要访问互联网资源,但是企业设置了防火墙或代理服务器,那么员工可以通过正向代理来访问互联网,代理服务器会代表员工发起请求。
  1. 反向代理(Reverse Proxy): 反向代理是位于目标服务器和客户端之间的代理服务器。当客户端发送请求到反向代理服务器时,代理服务器会根据一定的规则和配置,将请求转发给后端的目标服务器,并将目标服务器返回的响应返回给客户端。

主要特点和用途:

  • 客户端不知道真实的目标服务器,它只与反向代理服务器进行通信。
  • 反向代理常用于负载均衡、缓存、SSL加密和安全性控制等。
  • 举例:在Web应用部署中,反向代理服务器可以作为前端服务器,将客户端的请求转发给多个后端服务器,实现负载均衡和提高系统的性能和可用性。

三、Nginx的负载均衡

什么是负载均衡?

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?
Nginx给出来三种关于负载均衡的方式:

轮询法(默认方法):

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。


weight权重模式(加权轮询):

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的

情况。

这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大


ip_hash:

上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

四、Nginx的动静分离

Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式。目前,通过使用Nginx大大提高了网站的响应速度,优化了用户体验。

五、Nginx相关地址

源码:nginx -- nginx

官网:nginx news

相关推荐
一只大侠的侠11 小时前
Flutter开源鸿蒙跨平台训练营 Day 10特惠推荐数据的获取与渲染
flutter·开源·harmonyos
崔庆才丨静觅13 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606114 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了14 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅14 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅15 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
猫头虎15 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
崔庆才丨静觅15 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment15 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅15 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端