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
有很多的客户端连接,那么kill
掉nginx
,nginx
会像客户端发送tcp reset
复位包,但很多客户端无法很好的理解reset
包,就会造成异常。
由于nginx
的master
管理进程与worker
工作进程的分离设计,使得nginx
能够在7X24小时不间断服务的前提下,升级nginx
的可执行文件。当然,也支持不停止服务更新配置、更换日志文件等功能。
应用广泛
首先nginx
技术成熟,具备企业最常使用的功能,如代理、代理缓存、负载均衡、静态资源、动静分离、https、lnmp、lnmt等等
其次使用nginx
统一技术栈,降低维护成本,同时降低技术更新成本。
tengine\openresty
都是基于nginx
进行的二次开发
网络模型
nginx
使用epool网络模型,而apache
采用的是select
网络模型
select
:当用户发起一次请求,select
模型就会进行一次遍历扫描,从而导致性能低下
epoll
:当用户发起请求,epoll
模型会直接进行处理,效率高效。
Nginx应用场景
nginx
的主要场景归纳为三个,分为静态资源服务、代理资源服务、安全服务,场景详细介绍如下:下图是一个网站的基本架构,首先用户请求先到达nginx
然后在到tomcat
或php
这样的应用服务器,然后应用服务器再去访问redis
、mysql
这样的数据库,提供基本的数据功能。
负载均衡场景
那么这里有一个问题,我们的程序代码要求开发效率高,所以它的运行效率是很低的,或者说它并发是受限,所以我们需要很多应用服务组成一个集群,为更多用户提供访问。
而应用服务一但构成集群,则需要我们的nginx
具有反向代理功能,这样可以将动态请求传倒给集群服务。但很多应用构成集群,那么一定会带来两个需求。
- 应用服务器需要动态扩展
- 有些服务出问题需要做容灾
那么我们的反向代理必须具备负载均衡功能
代理缓存场景
其次,随着我们网络链路的增长,用户体验到的时延则会增加。如果我们能把一段时间内不会发生变化的动态内容,缓存在nginx
,由nginx
直接向用户提供访问,那么这样用户请求的时延就会减少很多,所以在这里反向代理会衍生出另外一个功能缓存,因为它能加速我们的访问。
静态资源场景
在很多时候我们访问docs、pdf、mp4、png
等这样的静态资源时,是没有必要将这些请求通过nginx
交给后端的应用服务,我们只需要通过nginx
直接处理静态资源即可。这是nginx
的静态资源功能。
安全应用场景
当我们使用http
网站时,可能会遭遇篡改,如果使用https
安全通讯协议,那么数据在传输过程中是加密的,从而能有效的避免黑客窃取或者篡改数据信息,同时也能避免网站在传输过程中的信息泄露。大大的提升我们网站安全。
Nginx组成部分
在这里我们将nginx
的组成架构比喻为一辆汽车:这个汽车提供了基本的驾驶功能,但是还需要一个驾驶员控制这辆汽车开往哪个方向,同时该汽车行驶过的地方还会形成GPS
轨迹,如果汽车在行驶的过程中出现了任何问题,我们需要一个黑匣子,分析是汽车本身的问题,还是驾驶人员的操作出现了问题。
- 第一个组成部分
nginx
二进制可执行文件:它是nginx
本身框架以及相关模块等构建的一个二进制文件,这个文件就相当于汽车本身,所有的功能都由它提供 - 第二个组成部分
nginx.conf
文件:它相当于驾驶人员,虽然二进制可执行文件已经提供了许多的功能,但是这些功能究竟有没有开启,或者开启后定义怎样的行为去处理请求,都是由nginx.conf
这个文件决定的,所以它就相当于这个汽车的驾驶员,控制这个汽车的行为 - 第三个组成部分
access.log
:它相当于这辆汽车经过所有地方形成的GPS轨迹,access.log
会记录nginx
处理过的每一条http
的请求信息、响应信息 - 第四个组成部分
error.log
:它相当于黑匣子,当出现了一些不可预期的问题时,可以通过error.log
将问题定位出来
Nginx
组成部分小结:
Nginx
的组成部分是相辅相成,Nginx
二进制文件和nginx.conf
文件,它定义了nginx
处理请求的方式。
而如果我们想对nginx
服务做一些web
的运营和运维,需要对access.log
做进一步分析。
而如果出现了任何未知的错误,或者预期的行为不一致,应该通过error.log
去定位根本性的问题。
留言