nginx 服务器

一、几种web服务器的比较

Apache的发展时期很长,Apache 有许多优点, 如稳定、 开源、 跨平台等, 但它出现的时间太长了,在它兴起的 所以它被设计成了一个重量级的、 不支持高并发的 Web 服务器。 在 Apache 服务器上, 如果有数以万计的并发 HTTP 请求同时访问, 就会导致服务器上消耗大量内存, 操作系统内核对成百上千的 Apache 进程做进程间切换也会消耗大量 CPU 资源, 并导致 HTTP 请求的平均响应速度降低, 这些都决定了Apache不可能成为高性能Web 服务器, 这也促使了Lighttpd和Nginx的出现。

IIS只能在 Windows 操作系统上运行。 Windows 作为服务器在稳定性与其他一些性能上都不如类 UNIX 操作系统, 因此, 在需要高性能 Web 服务器的场合下, IIS 可能会被“冷落” 。

Tomcat和Jetty面向 Java 语言, 先天就是重量级的 Web 服务器, 它的性能与 Nginx 没有可比性。

Lighttpd和Nginx一样, 都是轻量级、 高性能的Web服务器, 欧美的业界开发者比较钟爱 Lighttpd,而国内的公司更青睐Nginx。

二、nginx 的优点:

Nginx相对于Apache优点:
​		1、高并发相应性能非常好,官方Nginx处理景泰文件并发5w/s
​		2、反向代理性能非常强(可用于负载均衡)
​		3、内存和cpu占用率低 (为Apache的1/5 - 1/10)
​		4、对后端服务器又监控检查功能
​		5、支持PHP cgi 方式和 fastcgi 方式
​		6、配置代码简洁且易上手

web应用场景:
在这里插入图片描述
三、nginx的工作原理

Nginx默认采用多进程工作方式,Nginx启动后,会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口,同时对进程进行监护,管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。worker用来处理基本的网络事件,worker之间是平等的,他们共同竞争来处理来自客户端的请求。

在这里插入图片描述

Nginx主要由一个master主进程和多个worker进程
  • master主进程主要是管理worker进程,对网络事件进行收集和分发:

    1.接收来自外界的信号

    2.向各worker进程发送信号

    3.监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程

  • nginx用一个独立的worker进程来处理一个请求,一个worker进程可以处理多个请求:

  • 当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接。

  • 一个请求,完全由worker进程来处理,而且只在一个worker进程中处理。采用这种方式的好处:

    • 节省锁带来的开销。对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查上时,也会方便很多
    • 独立进程,减少风险。
    • 采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快重新启动新的worker进程。
    • 在一次请求里无需进程切换
  • Nginx的IO通常使用epoll,epoll函数使用了I/O复用模型。与I/O阻塞模型比较,I/O复用模型的优势在于可以同时等待多个(而不只是一个)套接字描述符就绪。Nginx的epoll工作流程如下:

    • master进程先建好需要listen的socket后,然后再fork出多个woker进程,这样每个work进程都可以去accept这个socket
    • 当一个client连接到来时,所有accept的work进程都会受到通知,但只有一个进程可以accept成功,其它的则会accept失败,Nginx提供了一把共享锁来保证同一时刻只有一个work进程在accept连接,从而解决惊群问题
    • 当一个worker进程accept这个连接后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完成的请求就结束了
  • Nginx最大连接数:

    • worker_processes:worker角色的进程个数
    • worker_connections:每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)
    • Nginx作为http服务器的时候:max_clients = worker_processes * worker_connections
    • Nginx作为反向代理服务器的时候:max_clients = worker_processes * worker_connections/4 (/4原因:因为浏览器默认会开启2个连接到nginx server,而且nginx还会为每个连接使用fds(file descriptor文件描述符)从连接池建立connection到upstream后端。)
  • Nginx主要通过nginx.conf文件进行配置使用。在nginx.conf文件中主要分为:

    • 全局块:一些全局的属性,在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等
    • event块:参考事件模型,单个进程最大连接数等
    • http块:设定http服务器
    • server块:配置虚拟主机
    • location块:配置请求路由及页面的处理情况等

四、nginx模块的作用

#1、全局块

​ 全局块主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。

​ 通常包括配置运行Nginx服务器的用户(组)、允许生成的worker processs数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。

#2、events块

​ events块涉及的指令主要影响Nginx服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下网络连接进行序列化,是否允许同时接受多少网络连接,选取哪种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。

​ 这一部分的指令对Nginx服务器的性能影响较大。

#3、http块

​ http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大部分的功能和第三方模块的配置都可以放在这个模块中。

​ http块中可以包含自己的全局块,也可以包含server块,server块中又可以进一步包含location块,我们学习时使用 “http全局块” 来表示http中自己的全局块,即http块中不包含在server中的部分。

​ 可以在http全局块中配置的指令包含文件引入、日志自定义、是否使用sendfile传输文件、连接超时时间、但连接请求数上限等

#4、server块

​ server块和“虚拟主机”的概念有密切联系。为了加深对相关配置的理解,在介绍server块之前, 我们简单了解一下虚拟主机的相关内容。

​ 虚拟主机,又称虚拟服务器、主机空间或是网页空间,它是一种技术。该技术是为了节省互联网 服务器硬件成本而出现的。这里的“主机”或“空间”是由实体的服务器延伸而来,硬件系统可以基于服务器群,或者单个服务器等。虚拟主机技术主要应用于HTTP、FTP及EMAIL等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用 服务器硬件资源。从用户角度来看,一台虚拟主机和一台独立的硬件主机是完全一样的。

​ 在使用Nginx服务器提供Web服务时,利用虚拟主机的技术就可以避免为每一个要运行的网站提 供单独的Nginx服务器,也无需为每个网站对应运行一组Nginx进程。虚拟主机技术使得Nginx服务 器可以在同一台服务器上只运行一组Nginx进程,就可以运行多个网站。

​ 它内部可有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务(或网站)。server全局块指令的作用域为本server块,其不会影响到其他的server块。

注意

​ 在http全局块中介绍过的部分指令可以在server块中和location块中使用,
​ 和http块相同,server块也可以包含自己的全局块,同时可以包含多个location块。在server全局 块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

#5、location块

​ 每个server块中可以包含多个location块。从严格意义上说,location其实时server块的一个指令,只是由于其在整个Nginx配置文档中起着重要的作用,而且Ngixn服务器在组多功能上的灵活性往往在location指令的配置中体现出来,这里称呼之”块“。

​ 这些location块的主要作用是基于Nginx服务器接受到的请求字符串(例如:server_name/uri),对除虚拟主机名称(也可以时IP别名)之外的字符串(前例中:uri 部分)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块:
核心模块:HTTP模块、EVENT(事件)模块和MALL模块
基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewirte模块
第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块

五、nginx 主要功能

nginx作为防火墙与服务器集群和数据库的中间,主要的功能有:反向代理,负载均衡,动静分离。

1)反向代理

 正向代理:
 某些情况下,代理我们用户去访问服务器,需要用户手动的设置代理服务器的ip和端口号。
 
 反向代理:
   1)是用来代理服务器的,代理我们要访问的目标服务器。
   2)代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),
   3)并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器。

在这里插入图片描述
2)负载均衡

 负载均衡:多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。

在这里插入图片描述
Nginx可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)

3)动静分离

Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。

        Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。

六、nginx 服务的命令控制

Nginx服务主进程所能接收的信号如下:

信号作用
TERM 或 INT快速停止Nginx服务
QUIT平滑停止Nginx服务
HUP使用新的配置文件启动进程,之后平缓停止原有进程,即: “平滑重启”
USR1重新打开日志文件,常用于日志切割
USR2使用新版本的Nginx文件启动服务,之后平缓停止原有Nginx进程,即“平滑升级”
WINCH平缓停止worker process,用户Nginx服务器平滑升级

常用的命令控制

cd   /opt/nginx

./sbin/nginx 				#启动nginx

./sbin/nginx  -s  stop		#快速停止nginx

./sbin/nginx  -s  quit		#平滑停止nginx	

./sbin/nginx  -s  reload	#重新加载nginx配置文件

平滑重启是这样一个过程。Nginx服务进程接收到信号后,先读取新的Nginx配置文件,如果配置语法正确,则启动新的Nginx服务,然后平缓关闭旧的服务进程;如果新的Nginx配置有问题,将显示错误,仍然使用旧的Nginx进程提供服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值