一个web请求从红色箭头进来后,会先经过Nginx,然后进入应用程序,然后再去访问数据库或缓存服务。
那么这里有一个问题,我们的应用服务要求的开发效率很高,所以运行效率是很低的,它的qps、tps或者并发都是受限的。所以需要把很多这样的应用程序组成一个集群,来提供高可用服务,集群对外服务需要Nginx提供反向代理功能,可以把动态请求传递给应用服务。
多个应用构成集群,一定会带来两个需求:动态扩容和当服务出问题时候的容灾。所以反向代理必须具备负载均衡功能。
在这样一个链路中,Nginx在企业内网中处于一个边缘节点,随着网络链路的增长,用户的延迟会增加,如果能把一些不经常变更的动态资源缓存到Nginx中,由Nginx直接提供访问,这样用户延迟就会减少很多。所以反向代理会衍生出另外一个功能缓存,缓存能够加速访问。
由于数据服务的业务场景比较简单,tps,并发性能要比应用程序高,所以第三个应用场景就是由Nginx直接访问数据服务作为API服务,直接访问数据库,利用Nginx强大的并发能力,来提供防火墙这样的复杂业务功能。这要求API服务有强大的业务处理功能,所以像OpenResty,lua这样的语言功能和语言工具库来提供完整的API服务。
Nginx出现的原因主要有三个。第一个就是互联网上的数据量快速增长。数据的爆炸性增长对硬件提出了很高的要求。硬件的提升符合摩尔定律。但是本世纪初,摩尔定律从单颗CPU上已经失效了,CPU开始向多核方向发展。比如,当一个服务从8核升级到16核后,性能提升是低于一倍的,这部分损耗的性能是由于操作系统和软件服务没有做好服务多核架构的准备,比如Apache。 在Apache中,架构模型一个进程同一时间只会处理一个连接一个请求。实际上是在使用操作系统中进程切换的特性。操作系统微观上只有有限个CPU,但是操作系统设计为同时服务数百上千的进程。在Apache中如果同时面临几十万请求时,无法开启几十万的进程,e
Nginx可以处理数百万甚至上千万的并发连接
Nginx的市场份额图,在存量的基础上从其他web服务抢占份额,说明新的服务,很多都在使用Nginx来处理。
四个部分相辅相成,二进制文件和配置,定义了Nginx处理请求的方式;如果想对服务进行运营分析,需要对access.log进行进一步分析;如果出现了未知问题,需要由error.log来定位根本问题
五个主要的Nginx版本
如果没有太多业务诉求,使用开源版Nginx 如果需要API服务器或者防火墙,使用开源OpenResty
对于一些常见的 Linux 发行版本,OpenResty® 提供 官方预编译包。确保你首先用这种方式来安装。
你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum update 命令)。运行下面的命令就可以添加我们的仓库:
yum install yum-utils -y
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
然后就可以像下面这样安装软件包,比如 openresty:
yum install openresty -y
如果你想安装命令行工具 resty,那么可以像下面这样安装 openresty-resty 包:
yum install openresty-resty -y
命令行工具 opm 在 openresty-opm 包里,而 restydoc 工具在 openresty-doc 包里头。
列出所有 openresty 仓库里头的软件包:
yum --disablerepo="*" --enablerepo="openresty" list available
参考 OpenResty RPM 包页面获取这些包更多的细节。
Nginx 文件结构比较简洁,主要包括配置文件和二进制可执行程序,通过安装包形式安装的 nginx 文件结构跟各 Linux 发行版目录规则存放配置文件和二进制文件的位置。
源码安装一般会把所有文件一起放到/usr/local/nginx,安装后整体的目录结构及文件功能如下:
[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp # POST 大文件暂存目录
├── conf # Nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
│ ├── fastcgi_params # fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒体类型
│ ├── mime.types.default
│ ├── nginx.conf #这是Nginx默认的主配置文件,日常使用和修改的文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相关参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params # uwsgi相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi临时数据目录
├── html # Nginx默认站点目录
│ ├── 50x.html # 错误页面优雅替代显示文件,例如出现502错误时会调用此页面
│ └── index.html # 默认的首页文件
├── logs # Nginx日志目录
│ ├── access.log # 访问日志文件
│ ├── error.log # 错误日志文件
│ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp # 临时目录
├── sbin # Nginx 可执行文件目录
│ └── nginx # Nginx 二进制可执行程序
├── scgi_temp # 临时目录
└── uwsgi_temp # 临时目录
ms: milliseconds s: seconds m: minutes h: hours d: days w: weeks M: months,30days y: years,365days
默认: bytes k/K: kilobytes m/M: megabytes g/G: gigabytes
文章内容参考极客时间专栏