初识Nginx (一)

Nginx适用于哪些场景


一个web请求从红色箭头进来后,会先经过Nginx,然后进入应用程序,然后再去访问数据库或缓存服务。

那么这里有一个问题,我们的应用服务要求的开发效率很高,所以运行效率是很低的,它的qps、tps或者并发都是受限的。所以需要把很多这样的应用程序组成一个集群,来提供高可用服务,集群对外服务需要Nginx提供反向代理功能,可以把动态请求传递给应用服务。

多个应用构成集群,一定会带来两个需求:动态扩容和当服务出问题时候的容灾。所以反向代理必须具备负载均衡功能。

在这样一个链路中,Nginx在企业内网中处于一个边缘节点,随着网络链路的增长,用户的延迟会增加,如果能把一些不经常变更的动态资源缓存到Nginx中,由Nginx直接提供访问,这样用户延迟就会减少很多。所以反向代理会衍生出另外一个功能缓存,缓存能够加速访问。

由于数据服务的业务场景比较简单,tps,并发性能要比应用程序高,所以第三个应用场景就是由Nginx直接访问数据服务作为API服务,直接访问数据库,利用Nginx强大的并发能力,来提供防火墙这样的复杂业务功能。这要求API服务有强大的业务处理功能,所以像OpenResty,lua这样的语言功能和语言工具库来提供完整的API服务。

Nginx出现的历史背景


Nginx出现的原因主要有三个。第一个就是互联网上的数据量快速增长。数据的爆炸性增长对硬件提出了很高的要求。硬件的提升符合摩尔定律。但是本世纪初,摩尔定律从单颗CPU上已经失效了,CPU开始向多核方向发展。比如,当一个服务从8核升级到16核后,性能提升是低于一倍的,这部分损耗的性能是由于操作系统和软件服务没有做好服务多核架构的准备,比如Apache。
在Apache中,架构模型一个进程同一时间只会处理一个连接一个请求。实际上是在使用操作系统中进程切换的特性。操作系统微观上只有有限个CPU,但是操作系统设计为同时服务数百上千的进程。在Apache中如果同时面临几十万请求时,无法开启几十万的进程,e

Nginx可以处理数百万甚至上千万的并发连接

Nginx的市场份额图,在存量的基础上从其他web服务抢占份额,说明新的服务,很多都在使用Nginx来处理。

Nginx的5个主要优点

  • 高并发,高性能:高并发往往只需要每个连接使用的内存尽量少就可以达到,同时达到高性能需要非常好的设计。Nginx在主流服务器,32核64G,可以轻松达到数千万并发连接,如果是处理简单的静态请求,可以达到100w的rps
  • 可扩展性好:模块化设计,生态圈丰富
  • 高可靠性:可以在服务器上持续不间断运行数年,一般的服务运行数月就需要重启,可以达到4个9,5个9这样的可靠性
  • 热部署:不停止服务的情况下升级服务。一般的服务kill掉重启就可以,但是如果kill掉Nginx进程会导致操作系统给所有已经建立连接的客户端发送一个TCP中的reset包,很多客户端是没办法很好的处理这种情况的,在大并发情况下,一些偶然事件会导致必然的恶性结果
  • BSD许可证:不只是开源免费,而且可以在基础上进行修改

Nginx的四个主要组成部分

  • Nginx二进制可执行文件:由各模块源码编译出的一个文件。相当于汽车本身
  • Nginx.conf配置文件:控制nginx的行为,开启哪些功能,具体参数设置。相当于驾驶员
  • access.log访问日志:记录没一条http请求信息与响应信息。相当于汽车经过的地方的轨迹
  • error.log错误日志:相当于黑匣子

四个部分相辅相成,二进制文件和配置,定义了Nginx处理请求的方式;如果想对服务进行运营分析,需要对access.log进行进一步分析;如果出现了未知问题,需要由error.log来定位根本问题

Nginx发行版本


五个主要的Nginx版本

  • 开源Nginx
  • 商业版Nginx Plus
  • 阿里Tengine:经过了阿里的严苛考验,有些特性优于Nginx;但是没有办法根据Nginx同步升级
  • 开源OpenResty
  • 商业版OpenResty

如果没有太多业务诉求,使用开源版Nginx
如果需要API服务器或者防火墙,使用开源OpenResty

安装Nginx

对于一些常见的 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 文件结构比较简洁,主要包括配置文件和二进制可执行程序,通过安装包形式安装的 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                       # 临时目录

Nginx配置文件

  • 配置文件由指令与指令块构成
  • 每条指令以;分号结尾,指令与参数间以空格分割
  • 指令块以{}大括号将多条指令组织在一起
  • include语句允许组合多个配置文件以提升可维护性
  • 使用#符号添加注释,提高可读性
  • 使用$符号使用变量
  • 部分指令的参数支持正则表达式

配置参数 时间单位

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

文章内容参考极客时间专栏

初识Nginx (一)相关推荐

  1. 初识 NGINX 服务网格

    https://mp.weixin.qq.com/s/uyMmVum5midT8uhC0HDJPw 初识 NGINX 服务网格 NGINX开源社区 今天 以下文章来源于Cloud Native Com ...

  2. 初识Nginx四:nginx代理服务器配置缓存

    文章目录 一.背景 二.配置 三.测试 四.注意点 一.背景 在上篇文章<初识Nginx二:配置一个反向代理服务器>中,我们成功通过Nginx的反向代理功能访问了上游的应用服务器. 在实际 ...

  3. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  4. ajax nginx 转发 sessionid_Nginx:初识Nginx(概念、在Docker中安装Nginx、常用命令、配置文件) - 怀梦想,致远方...

    1.Nginx初识 (1)概念 Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好 Nginx可以作为静态页面 ...

  5. nginx 还是欢迎界面_初识Nginx性能安全优化

    前言 最近小编的项目上线了官方网站,同大部分Web服务网站相同,小编项目的Web站采用了LNMP(Linux.Nginx.Mysql.PHP)架构.其中Nginx的作用是将静态资源进行解析返回给用户: ...

  6. 初识Nginx服务器

    1.Nginx服务器 1.1特点 高并发响应性能非常好,官方Nginx处理静态文件并发50k/s 负载均衡及反向代理性能非常强 系统内存及CPU占有率低 可以作为缓存服务器.邮件代理服务器 配置代码简 ...

  7. 初识Nginx重定向

    一.前言 什么是重定向呢? 重定向是一个非常常用的功能,在 web 服务中,通常会通过重定向功能,将一个域名的请求转发到另一个域名上. 什么情况下用到重定向? 举例:假设你有一个域名为 aaa.com ...

  8. 【Nginx系列】- 初识Nginx

    目录 第一印象 一.提供HTTP服务 二.提供反向代理 三.提供邮件代理 总结 第一印象 Ngxin是由俄罗斯人 戈尔·赛索耶夫使用C语言编写的高性能Web服务器,它可以做什么? 1.提供HTTP服务 ...

  9. Nginx学习笔记(一)

    Nginx初识 Nginx架构 Nginx在后台运行包含一个master进程和多个worker进程.所以Nginx一般以<u>多进程</u>方式运行,且支持**<u> ...

最新文章

  1. locust===官方说明文档,关于tasks
  2. golang 接口_「实战」助力数据库开发之接口篇 - Golang 连接 Greenplum
  3. LINUX下忘记MySQL的ROOT密码后修改,以及添加访问IP。
  4. java.security.InvalidKeyException:illegal Key Size
  5. java制作安卓客户端_制作网页的Android客户端(一)
  6. Mac 可设置环境变量的位置、查看和添加PATH环境变量
  7. QT的QStack类的使用
  8. 怎么判断再一个局域网内一个ip被两台机器占用_交换机与 VLAN 到底是怎么来的...
  9. linux 网络io命令详解,Linux下五种网络IO模型详解
  10. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用习题答案
  11. 苹果mac微软windows远程连接工具:microsoft remote desktop
  12. SQL中between过滤数据
  13. 虚幻引擎4 DEMO打包下载
  14. css3实现椭圆轨迹运动
  15. 【技巧】SourceInsight如何设置为相对路径
  16. 计算机视觉论文-2021-06-10
  17. BUUCTF Url编码
  18. oracle 折旧公式,oracle FA_资产折旧 1.1.doc
  19. m-序列简述及其相关性质
  20. 解决openssl提示链接库不存在的问题

热门文章

  1. 7-4 功夫传人 (25 分)
  2. 程序员转行记:当上大老板、迎娶白富美还全款买了房
  3. 223. 矩形面积-数学推导法
  4. 【Springboot 入门培训】#14 WebJars 样式包BootStrap 5架构
  5. oracle数据库函数mod,oracle数据库常用函数
  6. 解决】无法连接 MKS:套接字连接尝试次数太多正在放弃
  7. 毕业设计 基于STM32单片机的汽车防撞与控制系统
  8. lstm训练情感分析的优点_NLP入门(十)使用LSTM进行文本情感分析
  9. 微信小程序购物车模块(缓存相关知识点)
  10. 删除dockerhub仓库