内容目录

Nginx基本简述

什么是Nginx

  • Nginx是一个开源且高性能、可靠的Http Web服务、代理服务。
    • 开源,体现在直接获取Nginx的源代码(F5公司收购);
    • 高性能,体现在支持海量的并发
    • 高可靠,体现在服务稳定

为什么选择Nginx

高性能、高并发

通常正常情况下,单次请求会得到更快的响应。另一方面在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请求

高扩展性

Nginx官方、第三方,提供了非常多优秀的模块提供使用,这些模块都可以实现快速增加和减少。
nginx ---> uwsgi ---> python ---> py脚本文件

高可靠性

所谓高可靠性,是指Nginx可以在服务器上持续不间断的运行,而很多web服务器往往运行几周或几个月就需要进行一次重启。对于nginx这样的一个高并发、高性能的反向代理服务器而言,它往往运行网站架构的最前端,那么此时如果我们企业如果想提供9999、99999,对于nginx持续运行能够宕机的时间,一年可能只能以秒来计算,所以在这样的一个角色中,nginx的高可靠性为我们提供了非常好的保证。

热部署

热部署是指在不停服务的情况下升级nginx,这个功能非常的重要。
对于普通的服务,只需要kill掉进程再启动,但对于nginx而言,如果nginx有很多的客户端连接,那么killnginxnginx会像客户端发送tcp reset复位包,但很多客户端无法很好的理解reset包,就会造成异常。
由于nginxmaster管理进程与worker工作进程的分离设计,使得nginx能够在7X24小时不间断服务的前提下,升级nginx的可执行文件。当然,也支持不停止服务更新配置、更换日志文件等功能。

应用广泛

首先nginx技术成熟,具备企业最常使用的功能,如代理、代理缓存、负载均衡、静态资源、动静分离、https、lnmp、lnmt等等
其次使用nginx统一技术栈,降低维护成本,同时降低技术更新成本。
tengine\openresty都是基于nginx进行的二次开发

网络模型

nginx使用epool网络模型,而apache采用的是select网络模型
select:当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下
epoll:当用户发起请求,epoll模型会直接进行处理,效率高效。

Nginx应用场景

nginx的主要场景归纳为三个,分为静态资源服务、代理资源服务、安全服务,场景详细介绍如下:下图是一个网站的基本架构,首先用户请求先到达nginx然后在到tomcatphp这样的应用服务器,然后应用服务器再去访问redismysql这样的数据库,提供基本的数据功能。
file

负载均衡场景

那么这里有一个问题,我们的程序代码要求开发效率高,所以它的运行效率是很低的,或者说它并发是受限,所以我们需要很多应用服务组成一个集群,为更多用户提供访问。
而应用服务一但构成集群,则需要我们的nginx具有反向代理功能,这样可以将动态请求传倒给集群服务。但很多应用构成集群,那么一定会带来两个需求。

  1. 应用服务器需要动态扩展
  2. 有些服务出问题需要做容灾

那么我们的反向代理必须具备负载均衡功能
file

代理缓存场景

其次,随着我们网络链路的增长,用户体验到的时延则会增加。如果我们能把一段时间内不会发生变化的动态内容,缓存在nginx,由nginx直接向用户提供访问,那么这样用户请求的时延就会减少很多,所以在这里反向代理会衍生出另外一个功能缓存,因为它能加速我们的访问。
file

静态资源场景

在很多时候我们访问docs、pdf、mp4、png等这样的静态资源时,是没有必要将这些请求通过nginx交给后端的应用服务,我们只需要通过nginx直接处理静态资源即可。这是nginx的静态资源功能。
file

安全应用场景

当我们使用http网站时,可能会遭遇篡改,如果使用https安全通讯协议,那么数据在传输过程中是加密的,从而能有效的避免黑客窃取或者篡改数据信息,同时也能避免网站在传输过程中的信息泄露。大大的提升我们网站安全。
file

Nginx组成部分

在这里我们将nginx的组成架构比喻为一辆汽车:这个汽车提供了基本的驾驶功能,但是还需要一个驾驶员控制这辆汽车开往哪个方向,同时该汽车行驶过的地方还会形成GPS轨迹,如果汽车在行驶的过程中出现了任何问题,我们需要一个黑匣子,分析是汽车本身的问题,还是驾驶人员的操作出现了问题。
file

  1. 第一个组成部分nginx二进制可执行文件:它是nginx本身框架以及相关模块等构建的一个二进制文件,这个文件就相当于汽车本身,所有的功能都由它提供
  2. 第二个组成部分nginx.conf文件:它相当于驾驶人员,虽然二进制可执行文件已经提供了许多的功能,但是这些功能究竟有没有开启,或者开启后定义怎样的行为去处理请求,都是由nginx.conf这个文件决定的,所以它就相当于这个汽车的驾驶员,控制这个汽车的行为
  3. 第三个组成部分access.log:它相当于这辆汽车经过所有地方形成的GPS轨迹,access.log会记录nginx处理过的每一条http的请求信息、响应信息
  4. 第四个组成部分error.log:它相当于黑匣子,当出现了一些不可预期的问题时,可以通过error.log将问题定位出来

Nginx组成部分小结:
Nginx的组成部分是相辅相成,Nginx二进制文件和nginx.conf文件,它定义了nginx处理请求的方式。
而如果我们想对nginx服务做一些web的运营和运维,需要对access.log做进一步分析。
而如果出现了任何未知的错误,或者预期的行为不一致,应该通过error.log去定位根本性的问题。

最后修改日期: 2024年3月28日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。