【Nginx】核心概念与安装配置解释
文章目录
- 1. 概述
- 2. 核心概念
- 2.1.Http服务器
- 2.2.反向代理
- 2.3. 负载均衡
- 3. 安装与配置
- 3.1.安装
- 3.2.配置文件解释
- 3.2.1.全局配置块
- 3.2.2.HTTP 配置块
- 3.2.3.Server 块
- 3.2.4.Location 块
- 3.2.5.upstream
- 3.2.6. mine.type文件
- 3.3.多虚拟主机配置
- 4. 总结
1. 概述
Nginx是我们常用的一款Http和反向代理服务器,同时可以作为负载均衡器、邮件代理、HTTP缓存服务。它以其轻量级、高并发的特点广泛应用于各种场景。作为一名研发人员,掌握Nginx的应用和实践非常重要。
本节主要解释一下Nginx中的几个常用核心概念,并聊一聊如何进行安装和配置。
2. 核心概念
下面先对核心概念做一下解释
2.1.Http服务器
最常见的就是作为前端服务的Http服务器,我们的前端项目在发布的时候往往会打包成一组静态文件,而Nginx 可以直接作为一个静态资源(如 HTML 文件、图片、CSS 样式表、JavaScript 脚本等)的 Web 服务器来使用。它能高效地处理对这些静态资源的请求,快速响应客户端,减轻后端应用服务器的负担,提升网站整体的访问速度。
例如vue3+vite项目的打包和配置过程,可以参考我这篇博客:【Vue3实践】(六)Vue3使用vite处理环境变量、打包部署、nginx配置
2.2.反向代理
所谓的代理,就是客户端与服务端不直接交互,而是在中间加入了一层代理层,由代理层对服务请求和相应做转发。我们常说的代理包含两种,正向代理与反向代理。
- 正向代理:代理层代理的是客户端,由代理层与服务端做交互,并将信息转发给客户端。
- 反向代理:代理层代理的是服务端,客户端与代理层交互,而不知道服务端的具体情况。
下面有一幅图来表示正向代理和反向代理的区别:
简单的说,正向代理就是服务端不知道发起请求的客户端是谁,反向代理就是客户端不知道提供服务的服务端是谁。
2.3. 负载均衡
负载均衡往往是和反向代理共同使用的,当后端有多个服务器在提供相同的服务,Nginx可以按照一定的负载均衡策略,将客户端的请求合理的分配到不同的服务端处理,避免单个服务器负载过高而其他的服务器又非常空闲,从而提高架构整体性能和可用性。
Nginx中常用的负载均衡策略有3种:轮询、加权轮询、IP Hash。
- 轮询:适用于各个服务器性能相近的场景,就是按服务器的顺序,将请求依次转发到不同的服务器处理,假如有ABC三台服务,请求就会按照A,B,C,A,B,C…的顺序依次执行。。
- 加权轮询:适用于各个服务器性能不同的场景,在轮询的基础上给按性能给服务器分配权重。后续的请求就会趋近于这个权重来进行访问,比如服务器 A 权重为 3,服务器 B 权重为 2,服务器 C 权重为 1,那么在分配请求时,每 6 个请求中,A 会分配到 3 个,B 会分配到 2 个,C 会分配到 1 个,以此体现不同服务器的处理能力差异,将更多请求分配给性能更强的服务器。
- IP Hash:常用于有状态服务(如需要保持会话状态的应用)的场景,根据客户端的 IP 地址通过哈希算法计算出一个值,然后根据这个值来决定将请求分配到哪台后端服务器上,这样能保证来自同一个 IP 的请求始终被分配到同一台后端服务器。
3. 安装与配置
3.1.安装
Nginx的安装很简单,ubantu可以通过apt
,CentOS可以使用yum
来进行安装,当然也可以使用Docker安装。Docker的安装方式参考《【Docker】(五)使用bind mounts修改Docker容器中的Nginx配置文件》,里面讲了如何通过Docker安装Nginx并将配置文件挂载出来。
接下来看一下CentOS的安装方式,运行以下脚本:
sudo yum install nginx
执行完成后nginx,就安装好了,可以通过nginx -V
(V是大写的)来查看Nginx的信息。
注:图中高亮显示的部分,就是Nginx的配置文件所在的位置,接下来可以通过nginx
指令来启动Nginx。
nginx
# 查看进程
ps -ef | grep nginx
查看进程后可以看到,有1个master节点和4个worker节点,worker节点数和当前服务器的CPU核心数有关在下面的配置文件解释中会讲到。
3.2.配置文件解释
解释一下nginx.conf
这个配置文件中的常用配置项的含义:
3.2.1.全局配置块
全局配置块位于文件的顶部,定义 Nginx 的全局设置,影响整个服务。
- user:用户名,自己随便写
- worker_processes:工作线程数,设置为auto之后,会按照CPU核心数来设置工作线程
- error_log:保存错误日志的路径
- pid:记录主进程 PID 的文件路径
- incluede:引入其他.conf配置文件的位置
事件配置块中:
- worker_connections:每个工作进程允许的最大连接数
3.2.2.HTTP 配置块
HTTP 块是 Nginx 配置的核心,定义了 Web 服务的行为,包括服务器、路由、缓存等
- include:加载其他配置文件,实现配置分离。
- log_format:日志打印的格式
- access_log:访问日志的路径
- sendfile:启用高效文件传输模式,用于减少 CPU 和内存占用
- tcp_nopush:优化 TCP 包的传输,减少网络延迟
- default_type:未匹配文件类型时的默认 MIME 类型
3.2.3.Server 块
Server 块用于定义虚拟主机,每个 Server 块对应一个站点。
- listen:监听的端口号
- server_name:绑定的域名,可用通配符
- location:定义 URL 路径规则及对应处理方式
- root:文件根目录,在直接访问Nginx的虚拟主机端口时,会默认的访问根目录下的index.html
- index:修改默认访问html文件,一般是
index index.html index.htm;
- error_page:定义错误码及重定向的文件名。
我们打开根目录可以看到,里面就有默认的index.html
,404.html
,50x.html
等文件
3.2.4.Location 块
Location 是 Server 块的子配置,匹配 URL 路径并定义处理规则。
下面是一个拓展的location块:
location /api/ {proxy_pass http://backend_server; # 转发到后端服务器。proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;
}location ~* \.(jpg|jpeg|png|gif|ico)$ {root /usr/share/nginx/images; # 图片文件存放目录。expires 30d; # 缓存时间。
}
- proxy_pass:设置反向代理目标地址,大多数时候是配合
upstream
一起使用,upstream
可以配置负载均衡策略。 - proxy_set_header:传递自定义请求头给后端。
- ~*:正则表达式匹配,不区分大小写。
- expires:设置客户端缓存过期时间。
location中的各种通配符按优先级,如下所示:
- 精确匹配 (=)。
- 前缀匹配加通配符 (^~)。
- 正则表达式匹配 (~ 和 ~*),多个正则时,按照配置文件中先后顺序匹配。
- 普通前缀匹配(默认,无符号),按路径长度优先。
3.2.5.upstream
upstream 是定义后端服务器组的模块,用于负载均衡和请求分发。它允许您在多个后端服务之间分配请求流量。
- 轮询配置:
upstream backend_servers {server 192.168.1.101:8080; # 后端服务器1server 192.168.1.102:8080; # 后端服务器2server 192.168.1.103:8080; # 后端服务器3 }
- 加权轮询配置:
upstream backend_servers {server 192.168.1.101:8080 weight=3;server 192.168.1.102:8080; }
- IP HASH 配置:
upstream backend_servers {ip_hash;server 192.168.1.101:8080;server 192.168.1.102:8080; }
upstream一般是写在http块中的,例如:
http {upstream backend_servers {server 192.168.1.101:8080;server 192.168.1.102:8080;}server {location /api/ {proxy_pass http://backend_servers;proxy_cache cache_zone; # 启用缓存proxy_cache_valid 200 302 10m; # 缓存 10 分钟proxy_cache_valid 404 1m; # 404 错误缓存 1 分钟}}
}
3.2.6. mine.type文件
mime.types 文件用于定义 MIME 类型(Multipurpose Internet Mail Extensions),即文件的内容类型。
Nginx 会根据请求的文件扩展名匹配 mime.types 中定义的 MIME 类型,然后在 HTTP 响应头中包含 Content-Type 字段,告知客户端正确的文件类型。
3.3.多虚拟主机配置
上面我们提到了每个server
就是一个虚拟主机,在实际的工作中,我们往往会给不同的业务配置不同的虚拟主机,也就是在Nginx.conf中配置多个server,但是在实践中我们还有一个更优雅的方式。
上面的http块中有这么一行配置include /etc/nginx/conf.d/*.conf;
,也就是在conf.d
文件夹下导入所有以.conf
结尾文件。所以我们就可以针对不同的业务在conf.d
目录下新建不同.conf
文件就可以了。
4. 总结
本篇讲述了Nginx的核心概念、安装,以及如何修改Nginx的配置文件,涵盖了Nginx入门相关的内容。
相关文章:
【Nginx】核心概念与安装配置解释
文章目录 1. 概述2. 核心概念2.1.Http服务器2.2.反向代理2.3. 负载均衡 3. 安装与配置3.1.安装3.2.配置文件解释3.2.1.全局配置块3.2.2.HTTP 配置块3.2.3.Server 块3.2.4.Location 块3.2.5.upstream3.2.6. mine.type文件 3.3.多虚拟主机配置 4. 总结 1. 概述 Nginx是我们常用的…...
Qt界面篇:QMessageBox高级用法
1、演示效果 2、用法注意 2.1 设置图标 用于显示实际图标的pixmap取决于当前的GUI样式。也可以通过设置icon pixmap属性为图标设置自定义pixmap。 QMessageBox::Icon icon(...
【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】
关注二叉树的三个问题: 什么情况适合自顶向下?什么时候适合用自底向上?一般来说,DFS的递归边界是空节点,什么情况下要额外把叶子节点作为递归边界?在什么情况下,DFS需要有返回值?什…...
Mongo数据库 --- Mongo Pipeline
Mongo数据库 --- Mongo Pipeline 什么是Mongo PipelineMongo Pipeline常用的几个StageExplanation with example:MongoDB $matchMongoDB $projectMongoDB $groupMongoDB $unwindMongoDB $countMongoDB $addFields Some Query Examples在C#中使用Aggreagtion Pipeline**方法一: …...
Adobe Illustrator 2024 安装教程与下载分享
介绍一下 下载直接看文章末尾 Adobe Illustrator 是一款由Adobe Systems开发的矢量图形编辑软件。它广泛应用于创建和编辑矢量图形、插图、徽标、图标、排版和广告等领域。以下是Adobe Illustrator的一些主要特点和功能: 矢量绘图:Illustrator使用矢量…...
javax.xml.ws.soap.SOAPFaultException: ZONE_OFFSET
javax.xml.ws.soap.SOAPFaultException 表示 SOAP 调用过程中发生了错误,并且服务端返回了一个 SOAP Fault。 错误信息中提到的 ZONE_OFFSET 可能指的是时区偏移量。在日期和时间处理中,时区偏移量是指格林威治标准时间 (GMT) 的偏移量。如果服务期望特…...
常用的数据结构
队列(FIFO) 栈(LIFO) 链表 hash表 hash冲突处理 开放式寻址 线性探测 表示依次检查索引为 hash(key) + 1、hash(key) + 2 ... 的位置。i 是冲突后的探查步数。公式:hash(i) = (hash(key) + i) % TableSize二次探查 规则:冲突后探查的步长是平方递增的,例如,检查位置为 hash…...
javaweb-day01-html和css初识
html:超文本标记语言 CSS:层叠样式表 1.html实现新浪新闻页面 1.1 标题排版 效果图: 1.2 标题颜色样式 1.3 标签内颜色样式 1.4设置超链接 1.5 正文排版 1.6 页面布局–盒子 (1)盒子模型 (2)页面布局…...
C++11特性(详解)
目录 1.C11简介 2.列表初始化 3.声明 1.auto 2.decltype 3.nullptr 4.范围for循环 5.智能指针 6.STL的一些变化 7.右值引用和移动语义 1.左值引用和右值引用 2.左值引用和右值引用的比较 3.右值引用的使用场景和意义 4.右值引用引用左值及其一些更深入的使用场景分…...
基于Springboot的心灵治愈交流平台系统的设计与实现
基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统,后端框架使用Springboot和mybatis,前端框架使用Vuehrml,数据库使用mysql,使用B/S架构实现前台用户系统和后台管理员系统,和不同级别…...
初识java(2)
大家好,今天我们来讲讲java中的数据类型。 java跟我们的c语言的数据类型有一些差别,那么接下来我们就来看看。 一.字面常量,其中:199,3.14,‘a’,true都是常量将其称为字面常量。(…...
AIGC--AIGC与人机协作:新的创作模式
AIGC与人机协作:新的创作模式 引言 人工智能生成内容(AIGC)正在以惊人的速度渗透到创作的各个领域。从生成文本、音乐、到图像和视频,AIGC使得创作过程变得更加快捷和高效。然而,AIGC并非完全取代了人类的创作角色&am…...
Wonder3D本地部署到算家云搭建详细教程
Wonder3D简介 Wonder3D仅需2至3分钟即可从单视图图像中重建出高度详细的纹理网格。Wonder3D首先通过跨域扩散模型生成一致的多视图法线图与相应的彩色图像,然后利用一种新颖的法线融合方法实现快速且高质量的重建。 本文详细介绍了在算家云搭建Wonder3D的流程以及…...
【设计模式】【行为型模式(Behavioral Patterns)】之状态模式(State Pattern)
1. 设计模式原理说明 状态模式(State Pattern) 是一种行为设计模式,它允许对象在其内部状态发生变化时改变其行为。这个模式的核心思想是使用不同的类来表示不同的状态,每个状态类都封装了与该状态相关的特定行为。当对象的状态发…...
QML学习 —— 34、视频媒体播放器(附源码)
效果 说明 您可以单独使用MediaPlayer播放音频内容(如音频),也可以将其与VideoOutput结合使用以渲染视频。VideoOutput项支持未转换、拉伸和均匀缩放的视频演示。有关拉伸均匀缩放演示文稿的描述,请参见fillMode属性描述。 播放可能出错问题 出现的问题: DirectS…...
【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神经网络)是transformer特征增强的重要组成部分!
【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神经网络)是transformer特征增强的重要组成部分! 【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神…...
【Qt】控件7
1.QTextEdit的简单使用 使用简单的QTextEdit,获取到的内容显示到标签上 使用textChanged信号 在槽函数中需要获取QTextEdit的内容,对应操作是: QString curorui->textEdit->toPlainText();然后显示到标签上,对应操作是: …...
F12抓包14_修改网页图片网页保存到本地
课程大纲 1、修改网页图片(2种方式二选一) 修改网页图片,需要定位到图片标签,修改<img>标签的属性。2种方法: 1. 修改为网络图片url。缺点:url失效,图片无法显示。 2. 修改为图片base64&a…...
源代码检测,内附实际案例
源代码安全审计是依据国标GB/T 34944-2017、GB/T 34944-2017,结合专业源代码扫描工具对各种程序语言编写的源代码进行安全审计。能够为客户提供包括安全编码规范咨询、源代码安全现状评测、定位源代码中存在的安全漏洞、分析漏洞风险、给出修改建议等一系列服务。 源…...
1138:将字符串中的小写字母转换成大写字母
【题目描述】 给定一个字符串,将其中所有的小写字母转换成大写字母。 【输入】 输入一行,包含一个字符串(长度不超过100,可能包含空格)。 【输出】 输出转换后的字符串。 【输入样例】 helloworld123Ha 【输出样例】…...
《C++ 人工智能模型邂逅云平台:集成之路的策略与要点全解析》
在当今数字化浪潮汹涌澎湃的时代,人工智能无疑是引领技术变革的核心力量。而 C以其卓越的性能和高效的资源利用,成为开发人工智能模型的有力武器。与此同时,云平台所提供的强大计算能力、灵活的存储资源以及便捷的服务部署,为人工…...
【ArcGISPro】Sentinel-2数据处理
错误 默认拉进去只组织了4个波段,但是实际有12个波段 解决方案 数据下载 Sentinel-2 数据下载-CSDN博客 数据处理 数据查看 创建镶嵌数据集 在数据管理工具箱中找到创建镶嵌数据集...
Unity中的简易TCP服务器/客户端
在本文中,我将向你介绍一个在Unity中实现的简单TCP服务器脚本,和一个简单的客户端脚本. 脚本 MyTcpServer 允许Unity应用创建一个TCP服务器,监听客户端的连接、异步处理客户端消息,并通过事件与Unity应用中的其他模块进行通信。 MyTcpServe…...
Spring Boot 3.4 正式发布,结构化日志!
1 从 Spring Boot 3.3 升级到 3.4 1.1 RestClient 和 RestTemplate 新增对 RestClient 和 RestTemplate 自动配置的支持,可用 Reactor Netty 的 HttpClient 或 JDK 的 HttpClient。支持的客户端优先级: Apache HTTP Components (HttpComponentsClient…...
技术文档,they are my collection!
工作 今天这篇文章,献给一直撰写技术文档的自己。我自认为是公司中最爱写文档的人了,我们是一个不到40人的小公司,公司作风没有多么严谨,领导也不会要求我们写技术文档。但是从入职初至今,我一直保持着写技术文档…...
详解Qt之QtMath Qt数学类
文章目录 QtMath详解前言QtMath简介QtMath中的函数1. 三角函数1.1 qSin1.2 qCos 2. 指数与对数函数2.1 qExp2.2 qLn 3. 幂运算与平方根3.1 qPow3.2 qSqrt QtMath的优势1. 一致性与跨平台支持2. 与Qt生态系统集成3. 简洁性 总结 QtMath详解 前言 在C的开发中,数学运…...
人工智能与人类:共创未来的新篇章
数年前,当人工智能还停留在实验室的时候,很少有人能想到它会如此迅速地融入我们的日常生活。如今,从手机上的语音助手,到自动驾驶汽车,从智能家居到医疗诊断,AI的身影无处不在。这让我想起了20世纪初电力普…...
4.6 JMeter HTTP信息头管理器
欢迎大家订阅【软件测试】 专栏,开启你的软件测试学习之旅! 文章目录 前言1 HTTP信息头管理器的位置2 常见的HTTP请求头3 添加 HTTP 信息头管理器4 应用场景 前言 在 JMeter 中,HTTP信息头管理器(HTTP Header Manager)…...
非交换几何与黎曼ζ函数:数学中的一场革命性对话
非交换几何与黎曼ζ函数:数学中的一场革命性对话 非交换几何(Noncommutative Geometry, NCG)是数学的一个分支领域,它将经典的几何概念扩展到非交换代数的框架中。非交换代数是一种结合代数,其中乘积不是交换性的&…...
【设计模式】【行为型模式(Behavioral Patterns)】之观察者模式(Observer Pattern)
1. 设计模式原理说明 观察者模式(Observer Pattern) 是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式非常适合处理事件驱动系统&a…...
虚拟交易网站开发/长沙网站seo公司
vi里怎样跳转到某一指定行 输入 :行号 :$跳到最后一行 gg跳到第一行。转载于:https://www.cnblogs.com/liuweilinlin/p/3173132.html...
网站建设的总体目标/青岛新闻最新今日头条
在用vue做 移动端项目的时候. 特别是调用相机拍照的时候有些手机会旋转照片,导致拍出来是 歪的, 横着的, 这里记录下怎么解决这个问题. demo 请狠狠的戳这里 https://download.lllomh.com/cliect/#/product/A810032847082261 1, 安装 compressorjs 插件,导入 import Comp…...
cms下载官方网站/优化关键词哪家好
数字经济时代,数据与算力就是生产力已经成为行业的重要共识。数据、算力增长的背后,涉及的端侧设备、协同平台、数据存储、处理等碳排也与日俱增,不可忽视。拿核心的数据中心来说,有关研究机构数据显示,过去十年&#…...
中交路桥建设网站/腾讯朋友圈广告怎么投放
分支预测 在stackoverflow上有一个非常有名的问题: 为什么处理有序数组要比非有序数组快,可见分支预测对代码运行效率有非常大的影响。 现代CPU都支持分支预测(branch prediction)和指令流水线(instruction pipeline),这两个结合可以极大提高…...
深圳网站建设信科便宜/济南seo优化
官方API说明文档 http://www.newtonsoft.com/json/help/html/N_Newtonsoft_Json.htm http://www.newtonsoft.com/ http://json.codeplex.com/ 安装:1.解压下载文件,得到Newtonsoft.Json.dll2.在项目中添加引用..序列化和反序列在.net项目中: Product product new Product(); p…...
博山专业网站优化哪家好/sem和seo是什么
如果我要去11-20的Account表的数据 Select * From Account Limit 9 Offset 10; 以上语句表示从Account表获取数据,跳过10行,取9行 嗯,我觉得这个特性足够让很多的web中型网站使用这个了。 也可以这样写 select * from account limit10,9和上面…...