初识Nginx (一)

article/2025/5/7 0:25:35

初识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

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


http://chatgpt.dhexx.cn/article/OmevUBgV.shtml

相关文章

SQL Server数据库维护计划的实施步骤(转帖)

我公司在组建局域网时,考虑到商业企业的特点,仔细考量了购、销、存三大环节中发生的各种数据及其存储问题后,选定了以Windows 2000 Server为操作系统,SQL Server 2000为数据库平台来搭建局域网的应用系统的软件平台,以…

达梦数据库的使用与维护

本文是从安装达梦库到使用维护的过程。 1.达梦库的安装 1.1收集软硬件信息 我是用的是本地虚拟机,操作系统是中标麒麟6.0,数据库版本为dm7_setup_rh6_64_ent_7.6.0.197_20190917。安装前需确认下机器的cpu,系统版本,空间存储等…

SQL Server 维护计划(数据库备份)

通过维护计划实现数据库完整备份 步骤一 打开数据库——》在资源管理器中找到管理——》找到维护计划——》鼠标右键新建维护计划 步骤二 在资源管器左边——》选择工具箱——》将"备份数据库"任务、"清除维护任务"、"收缩数据库"任务选项——…

【数据库管理】数据库自动维护任务介绍

概述自动维护任务的演变 10g 预定义的维护窗口Maintenance Windows预定义的自动系统任务Predefined Automatic System Tasks 11g 预定义的维护窗口Maintenance Windows预定义自动维护任务Automated Maintenance Tasks 12c 预定义的维护窗口Maintenance Windows预定义自动维护任…

服务器数据库维护需要做哪些,数据库运维究竟需要做什么?

数据库是存放数据、经常是那些高敏感度数据的宝库,因此它也毫无疑问的是合规检查程序的重点区域。几乎所有的企业合规都会对哪些人、能在什么时间、访问什么数据库作出规定,并且需要一个专职人员来管理这些权限。那么,作为管理数据库的专职人员,需要做些什么呢?下面来了解…

创建与维护MySQL数据库

目录 一、创建MySQL数据库 1.链接MySQL 2.查看当前的数据库 3.创建数据库 4.创建数据库时设置字符编码 5.查看和显示数据库的编码方式 6.使用alteer database 数据库名character set utf8; 修改数据库编码 7.进入或切换数据库 8.显示当前数据库 select database(); 二…

第10章 数据库运行维护与优化

10.1数据库运行维护基本工作 一般来说,维护工作主要包括:数据库的转储和恢复;数据库的安全性和完整性控制;数据库性能的监控分析和改进;数据库的重组和重构。 ①数据库的转储与恢复 作为数据库管理员,应该针对各种数…

SQL Server维护计划自动备份数据库

GPS平台、网站建设、软件开发、系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p1841 使用SQL Server 2008的维护计划可以实现自动备份数据库,并自动删除过期备份的功…

mysql数据库维护(mysql学习笔记)

数据库备份: 2.数据库维护: analyze table用来检查表键是否正确,如下: check table 用来针对许多问题对表进行检查。在myisam表上海对索引进行检查。check table支持一系列的用于myisam表的方式,changed检查自最后一次…

Oracle DB 数据库维护

• 管理优化程序统计信息 • 管理自动工作量资料档案库(AWR) • 使用自动数据库诊断监视器(ADDM) • 说明和使用指导框架 • 设置预警阈值 • 使用服务器生成的预警 • 使用自动任务 数据库维护 通过复杂的Oracle DB 基础结构,可以方便地执行预先数据库维护&#xf…

使用SQL命令创建与维护数据库

创建数据库 create database DB_Book -- 数据库名,在现有连接中不可重复 on primary -- 主文件 (name DB_Book, -- 数据文件逻辑名filename D:\A_file\数据库\图书管理\DB_Book.mdf, -- 文件名及位置size 1mb, -- 初始大小maxSize 1…

sqlserver数据库得管理及维护

sqlserver数据库得管理及维护 sqlserver数据库得管理及维护 sqlserver数据库得管理及维护前言一、手动备份及恢复二、自动备份及定期清除备份集计划三、数据库日志收缩方法一:直接通过企业管理器收缩日志方法二:分离数据库及日志文件 四、数据库索引碎片…

《数据库系统实训》实验报告——数据库维护

数据库维护 第一部分:样例库的应用 1)备份数据库命令: mysqldump -u root -p --databases test1 > /usr/local/mysql/test1.bak.sqltest1是数据库的备份文件 2)恢复备份数据: 首先删除原有的数据库test1&#xf…

SQL Server 数据库维护计划

SQL Server 数据库维护计划 开始 SQL Server 维护计划向导选择计划属性新建作业计划选择维护任务选择维护任务顺序维护任务配置1. 数据库检查完整性2. 数据库完整性备份3. 数据库差异性备份4. 数据库事务日志备份5. 清除维护 选择报告选项启用邮件配置文件重启代理服务执行维护…

MySQL之数据库维护

文章目录 1 数据库维护1.1 数据库文件1.1.1 MySQL创建并管理的数据库文件1.1.2 MySQL数据库存放位置 1.2 性能状态关键指标QPS和TPS1.3 开启慢查询日志1.4 数据库备份1.4.1 myqldump示例 1.5 数据库修复1.5.1 myisamchk修复1.5.2 mysqlcheck修复1.5.3 .frm文件修复1.5.3.1 Inno…

数字电路实验怎么接线视频讲解_电工知识:三相电表怎么接线?2种接线方法一一讲解,实物对照...

之前我们介绍单项电表接线方法,本期我们介绍三相电表接线方法,主要说两种,一种是直接式一种是带电流互感器的。这2种接线从测量原理和构成角度来说,没什么差别。只不过直接式的三相电表额定电流是根据负载的电流来选的&#xff0c…

数电实验七:译码显示电路

转载自https://wu-kan.cn/_posts/2018-07-03-译码显示电路/ 数字电子技术实验报告 实验题目:译码显示电路 预习报告 内容一 74LS194芯片相关。 功能与真值表 CP时钟 C r ‾ \overline{Cr} Cr清零 S 1 {S_1} S1​ S 0 {S_0} S0​工作状态 Q A Q_A^ QA​ Q B …

【数电实验3】Verilog—1位十进制可逆计数器

【2022.04西南交大数电实验】 【2022.04.17 更新修改了一个错误: assign CO (upd & (Q 4d9)) | (~upd & (Q 4d0) & ~clr); ~clr改为了clr: assign CO (upd & (Q 4d9)) | (~upd & (Q 4d0) & clr); 另外 ,把…

数电实验三-点亮四个数码管(Multisim和Basys3)

【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击查看学习资料) 特别说明:该系列内容均是本人实验记录,无盗取侵权之嫌…

数电实验八 译码显示电路(2)点阵的原理和应用

仅作笔记用途。 器件:16*16 点阵、74LS138 、74LS00 等。 注:proteus上用4个8*8点阵组合为16*16点阵时,要先旋转8*8点阵直到其行有效电平为高,列有效电平为低才和实验箱上的一致,并且针脚分别控制哪几行哪几列也需要…