1.nginx概述
Nginx (engine x)是一个高性能的HTTP和反向代理Web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、网易、腾讯、淘宝等
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率
2.正向代理与反向代理
正向代理(Forward Proxy)是代理服务器的一种,用于代理客户端(如电脑、手机)向外部服务器发出的请求。其主要作用是帮助客户端访问外部资源,隐藏客户端的IP地址,并可用于加速、过滤内容或实现网络访问控制。正向代理的工作原理如下:
- 客户端发送请求到代理服务器
- 代理服务器接收到请求后,代表客户端向目标服务器发出请求
- 目标服务器将响应返回给代理服务器
- 代理服务器将响应内容返回给客户端
在这种模式下,目标服务器通常不知道客户端的真实IP地址,它只知道来自代理服务器的请求。因此,正向代理常用于访问受限的资源(例如访问外网)、提高安全性、或加速网络访问。典型的应用场景包括:
- 科学上网:正向代理服务器帮助用户访问受地理位置限制的内容
- 缓存:将一些常用资源缓存到代理服务器,提升访问速度
- 匿名访问:代理服务器隐藏客户端真实IP,提高隐私性
反向代理(Reverse Proxy)是一种代理服务器,位于客户端和服务器之间,用于代理客户端对服务器的请求。与正向代理不同,反向代理代理的是服务器端而不是客户端。其主要功能是隐藏服务器的真实地址,提升系统的性能、安全性和可扩展性。反向代理的工作原理如下:
- 客户端向反向代理服务器发送请求
- 反向代理服务器接收到请求后,判断或选择适当的后端服务器,将请求转发过去
- 后端服务器处理请求,并将响应发送回反向代理服务器
- 反向代理服务器将响应内容返回给客户端
在这种模式下,客户端并不知道具体是哪台服务器提供了服务,而只看到反向代理服务器的地址。反向代理服务器是代表后端服务器来应答客户端请求的。反向代理的主要应用场景包括:
- 负载均衡:反向代理将客户端请求分配到多台服务器上,均衡各服务器的负载,提升系统的性能和处理能力
- 安全防护:通过隐藏后端服务器的真实IP地址,反向代理可以保护内部网络免受直接的攻击
- 缓存加速:反向代理缓存后端服务器的响应,减少重复请求带来的负担,提高访问速度
- SSL终结:反向代理处理客户端的SSL加密请求,降低后端服务器的计算负担
3.负载均衡
普通的请求/响应模式是比较常见且成本较低的方式,但是当并发请求很多的时候,容易导致服务器过载,可以通过负载均衡技术解决,负载均衡(Load Balancing)通过合理地分配网络流量到多台服务器上,以避免某一台服务器过载,从而提高系统的响应速度、稳定性和处理能力。负载均衡的实现方式包括:
- DNS负载均衡:通过将域名解析为多个服务器的IP地址,客户端随机选择一个IP来访问。
- 硬件负载均衡:使用专门的负载均衡设备(如F5等),具有高性能和复杂的负载分配策略。
- 软件负载均衡:使用软件(如Nginx、HAProxy等)在服务器集群中分配流量,灵活、可配置。
常见的负载均衡算法有:
- 轮询:按顺序将请求依次分配给每台服务器。
- 加权轮询:根据服务器的性能设置权重,权重越高的服务器分配到的请求越多。
- 最少连接数:将请求分配给当前连接数最少的服务器,适合长时间连接的应用。
- 源IP哈希:根据客户端IP地址进行哈希计算,将请求始终分配给相同的服务器。
4.动静分离
动静分离技术是一种用于优化网站性能的架构策略,将动态资源和静态资源分开处理,以提高访问效率、减轻服务器负载。动态资源通常是需要服务器实时处理、生成的内容(如用户数据查询、购物车等),而静态资源是无需修改、可以直接读取的文件(如图片、CSS、JavaScript文件等)。动静分离的主要原理和实现方式如下:
-
静态资源的独立存储与分发
将静态资源(如图片、CSS、JavaScript)存储在独立的服务器上,或者直接放置到内容分发网络(CDN)中,由CDN缓存和分发。这样,用户在访问静态资源时,不需要经过主服务器,从而减少主服务器的压力,提高资源的访问速度。 -
动态资源由主服务器处理
动态资源通常需要服务器实时处理,比如数据库查询、用户身份验证、个性化推荐等。这些请求仍然交给主服务器,由服务器进行计算和返回。 -
前端通过URL路由区分动静资源
在前端开发中,可以通过URL路径、文件后缀等方式区分静态和动态资源。例如,动态请求路径指向主服务器,而静态资源路径指向CDN或独立的静态资源服务器。
动静分离的优势:
-
提升性能与访问速度
静态资源通过CDN等加速网络分发,可以减少访问延迟,提升用户的加载速度。同时,减少主服务器的负载,使其能够更快地处理动态请求。 -
降低服务器负载
静态资源由独立的服务器或CDN处理,主服务器只需处理动态请求,从而减轻了主服务器的压力,提高了系统的稳定性。 -
降低带宽和成本
静态资源大部分可以缓存,一旦存储在CDN等网络中,即可减少主服务器的流量需求,有效降低带宽和运营成本。 -
增强扩展性
动静资源分离后,可以分别对静态和动态部分进行扩展。例如,静态资源可以单独增加CDN节点,而动态服务器可以根据负载增加服务节点,使得系统更具弹性。