Nginx(基础安装+配置文件)
目录
一.Nginx基础
1.基础知识点
2.异步非阻塞机制
二.Nginx安装
2.1安装nginx3种方式
1.包管理工具安装(yum/apt)
2.本地包安装(rpm/dpkg)
3.源码编译安装
3.1 源码编译安装nginx流程(ubuntu)
1. 更新apt源、下载lrzsz工具
2.安装依赖包
3.创建运行用户
4.编译安装nginx编辑
5.检查、启动、重启、停止 nginx服务
6.nginx如何前台启动
3.2nginx版本平滑升级
3.3添加 Nginx 系统服务管理
三.nginx进程
四.nginx配置
一.Nginx基础
1.基础知识点
Nginx 是一个 轻量级、高性能的Web服务应用,可以作为 HTTP 服务器、虚拟主机、反向代理服务器、负载均衡器,以及支持 TCP/UDP 的通用代理服务器。
特点:稳定性高、不容易宕机;开源免费;内存/cpu资源消耗较少;并发能力高,至少能同时处理2-3万并发,最多能支持5万并发
2.异步非阻塞机制
Nginx 的异步非阻塞机制通过 事件驱动模型 和 I/O 多路复用技术 实现,使得单个 Worker 进程能够高效处理成千上万的并发连接。
1. Worker进程初始化,监听指定的端口(如80或443)。
2. 当有新的连接请求到达时,Worker进程接受该连接,并将其注册到事件循环中。
3. 事件循环使用I/O多路复用机制(epoll)来监视所有注册的文件描述符(即连接)。
4. 当某个连接上有可读或可写事件发生时,事件循环会触发相应的回调函数来处理该事件。
5. 在处理事件时,如果需要进行I/O操作(如读取请求数据或发送响应数据),这些操作会被异步执行,不会阻塞进程。
6. 处理完一个事件后,事件循环继续检查其他事件,循环往复。
-
异步非阻塞 I/O:
当发起 I/O 操作(如读取网络数据、写入文件)时,进程不等待操作完成,而是继续处理其他任务;操作完成后,通过事件通知机制(如回调函数)处理结果。 -
事件驱动模型:
Worker 进程通过事件循环(Event Loop)监听所有连接的事件(如可读、可写),仅处理已就绪的事件,避免空等。 -
I/O 多路复用:
使用操作系统提供的机制(如epoll、kqueue)同时监控多个文件描述符(即连接),当任意一个描述符就绪时立即通知进程。
二.Nginx安装
2.1安装nginx3种方式
1.包管理工具安装(yum/apt)
-
原理:通过系统的包管理工具自动从官方仓库下载并安装预编译的包。
-
特点:自动解决依赖、自动生成service文件
-
命令: centos: yum install nginx -y ubuntu: apt install nginx -y
2.本地包安装(rpm/dpkg)
-
原理:手动下载
.rpm(Red Hat系)或.deb(Debian系)包,都属于预编译的二进制包 -
特点:手动解决依赖、包含service文件
-
命令:centos: rpm -i nginx.rpm 或 ubuntu:
dpkg -i nginx.deb安装。
3.源码编译安装
-
原理:从Nginx官网下载源代码,手动编译并安装。
-
特点:
-
完全自定义:可启用/禁用模块(如
--with-http_ssl_module)、指定安装路径(如--prefix=/opt/nginx)。 -
性能优化:自行调整编译参数(如
-march=native)。 -
手动处理依赖:需提前安装开发工具(如gcc)及依赖库(如PCRE、OpenSSL)。
-
无自动管理:更新需重新编译,服务脚本需手写service文件。
-
独立目录结构:默认安装到
/usr/local/nginx,与系统包隔离。
-
3.1 源码编译安装nginx流程(ubuntu)
1. 更新apt源、下载lrzsz工具
apt update
apt install -y lrzsz 用于本地主机和服务器相互传输文件
2.安装依赖包
ubuntu: apt -y install libpcre3-dev zlib1g-dev libssl-dev build-essential
centos: yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
3.创建运行用户
Nginx 服务程序默认以 nobody 身份运行:useradd -M -s /sbin/nologin nginx
4.编译安装nginx
./configure --prefix=/usr/local/nginx \ #指定了Nginx的安装目录。在这种情况下,它将安装在 /usr/local/nginx 目录下。
--user=nginx --group=nginx \ #指定了运行Nginx进程的用户和组。在这种情况下,它将是用户 和组 nginx。
--with-http_gzip_static_module \ #启用了支持使用 .gz 扩展名提供预压缩文件的功能。
--with-http_flv_module \
--with-http_ssl_module \ #启用了对HTTP连接的SSL/TLS加密支持。
--with-http_realip_module \
--with-http_v2_module \ #启用了对HTTP2.0协议的支持
--with-http_sub_module \
--with-http_mp4_module \
--with-http_stub_status_module \ #启用了 stub_status 模块,提供了访问Nginx状态信息的方 法。
--with-pcre \ #启用了对Perl Compatible Regular Expressions(PCRE) 库的支持。
--with-stream \ #启用了对TCP/UDP代理模块的支持。
--with-stream_ssl_module \ #启用了对TCP/UDP连接的SSL/TLS加密支持。
--with-stream_realip_module #允许Nginx从PROXY协议头部获取客户端的真实IP地址。
make -j 2(cpu数量决定) 
make -install (安装) 
注意:
1.让系统识别nginx操作命令,将nginx的可执行文件做上软链接 
2.更改nginx文件夹下的属主属组
chown -R nginx.nginx /usr/local/nginx

5.检查、启动、重启、停止 nginx服务
1.检查nginx配置文件:/usr/local/nginx/conf/nginx_conf
nginx -t 检查配置文件是否有语法错误

2.启动nginx服务
3.停止nginx服务


4.重载nginx服务
5.日志分割,重新打开日志文件
nginx 存放日志文件的位置: /usr/local/nginx/logs

生成存放成功日志、错误日志的空文件:kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
6.nginx如何前台启动
3.2nginx版本平滑升级 


kill -USR2 <PID号>
注意:升级完成后要使用绝对路径启动服务,否则升级可能会报错
3.3添加 Nginx 系统服务管理
因为编译安装没有service文件,如果想要系统服务统一管理systemed,需要编写service文件。
service 文件
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target


三.nginx进程
master 进程 :1.管理worker子进程 2.加载配置文件
worker 进程: 1.处理客户端发送的请求

以处理 HTTP 请求为例:
-
接收连接:Worker 进程通过
epoll监听端口,接收客户端连接。 -
读取请求:若数据未到达(非阻塞),Worker 继续处理其他连接;若数据到达,读取并解析请求。
-
处理请求:若需读取静态文件,发起非阻塞文件 I/O 操作;若需代理到后端,发起非阻塞网络连接。
-
响应客户端:待所有操作完成后,通过事件回调将结果返回客户端。
1. 核心优势
-
低资源消耗:单线程可处理数万并发连接,避免多线程的内存开销和上下文切换。
-
高吞吐量:通过事件分发机制,最大化 CPU 和 I/O 利用率。
四.nginx配置
nginx配置文件的路径: /usr/local/nginx/conf/nginx_conf
1、全局块:全局配置,对全局生效;
2、events块:配置影响 Nginx 服务器与用户的网络连接;
3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
4、server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
5、location块:用于配置匹配的 urI (域名后面的部分);
6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。
全局块:全局配置,对全局生效;

events块:配置影响 Nginx 服务器与用户的网络连接;

http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
注意:http模块中还可以第三方模块的配置
server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
location块:用于配置匹配的 urI (域名后面的部分);
upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。
相关文章:
Nginx(基础安装+配置文件)
目录 一.Nginx基础 1.基础知识点 2.异步非阻塞机制 二.Nginx安装 2.1安装nginx3种方式 1.包管理工具安装(yum/apt) 2.本地包安装(rpm/dpkg) 3.源码编译安装 3.1 源码编译安装nginx流程(ubuntu) 1.…...
Cryptography 与 PyCryptodome 源码级解析
目录 Cryptography 与 PyCryptodome 源码级解析一、引言二、Cryptography 库源码解析2.1 Cryptography 库概述与设计理念2.2 核心模块与数据流分析2.2.1 目录结构与模块划分2.2.2 以 AES-GCM 模式为例的加解密实现2.2.3 源码示例解析2.3 错误处理与边界检测三、PyCryptodome 源…...
uni-app+vue3学习随笔
目录相关 static文件 编译器会把static目录中的内容整体复制到最终编译包内, 非 static 目录下的文件(vue组件、js、css 等)只有被引用时,才会被打包编译。 css、less/scss 等资源不要放在 static 目录下,建议这些…...
边缘计算的业务种类划分
Pcdn的业务可以根据不同的分类标准来划分 一、按线路类型划分 汇聚模式:一个地方有多条线路,业务种类较多。通常使用X86或X99主板组装的服务器,或各品牌的准系统服务器。收益通常比单线模式更高。 单线模式:一个地方只有一条线路&…...
prompt大师高效提示词解析
Prompt大师李继刚高效提示词示例解析 一、「汉语新解」提示词 核心结构 采用Lisp语言框架嵌套中文语义,通过(defun 新汉语老师 ()...)定义角色风格(融合奥斯卡王尔德、鲁迅的批判性语言),用(隐喻 (一针见血...))构建解释逻辑链。…...
QT系列教程(18) MVC结构之QItemSelectionModel模型介绍
视频教程 https://www.bilibili.com/video/BV1FP4y1z75U/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 QItemSelectionModel Qt的MVC结构支持多个View共享同一个model,包括该model的选中状态等。我们可以通过设置QItemSelectionModel,来更改View的选…...
【Java面试题汇总】Java面试100道最新合集!
1.说说你对面向对象的理解 得分点 封装,继承,多态、概念、实现方式和优缺点 面向对象的三大基本特征是:封装、继承、多态。 封装:将对象的状态和行为包装在一个类中并对外界隐藏实现的细节,可以通过访问修饰符控制成员的访问权限,…...
Vue 实现智能检测文字是否溢出,溢出显示省略号,鼠标悬浮显示全部【附封装组件完整代码+详细注释+粘贴即食】
一、场景需求 在项目中,经常会遇到文本内容超出容器的情况。为了提高用户体验,我希望在文字溢出时显示悬浮提示,未溢出时则不显示。 二、效果演示 三、实现原理 DOM宽度对比法:通过比较元素的scrollWidth(实际内容宽…...
51c大模型~合集10
我自己的原文哦~ https://blog.51cto.com/whaosoft/11547799 #Llama 3.1 美国太平洋时间 7 月 23 日,Meta 公司发布了其最新的 AI 模型 Llama 3.1,这是一个里程碑时刻。Llama 3.1 的发布让我们看到了开源 LLM 有与闭源 LLM 一较高下的能力。 Meta …...
为什么要使用前缀索引,以及建立前缀索引:sql示例
背景: 你想啊,数据库里有些字段,它老长了,就像那种 varchar(255) 的字段,这玩意儿要是整个字段都拿来建索引,那可太占地方了。打个比方,这就好比你要在一个超级大的笔记本上记东西,每…...
关于C/C++语言的初学者在哪刷题,怎么刷题
引言: 这篇博客主要是针对初学者关于怎么在网上刷题,以及在哪里刷题。 1.介绍平台(在哪刷题): 1.牛客牛客网https://www.nowcoder.com/ :有许多面试题,也有许多供学习者练习的题 2.洛谷洛谷 …...
AI自动化编程初探
先说vscodeclinemodelscope方案,后面体验trae或者cursor再写写其它的。vscode和trae方案目前来说是免费的,cursor要用claud需要付费,而且不便宜,当然效果可能是最好的。 vscode方案,我的经验是最好在ubuntu上ÿ…...
《人月神话》:软件工程的成本寓言与生存法则
1975年,Fred Brooks在《人月神话》中写下那句振聋发聩的断言——“向进度落后的项目增加人力,只会让进度更加落后”——时,他或许未曾料到,这一观点会在半个世纪后的人工智能与云原生时代,依然如达摩克利斯之剑般悬在每…...
深入理解Java中的static关键字及其内存原理
static是Java中实现类级共享资源的核心修饰符,它突破了对象实例化的限制,使得变量和方法能够直接与类本身绑定。这种特性让static成为构建工具类、全局配置等场景的利器,但同时也带来独特的内存管理机制需要开发者关注。 static修饰成员变量…...
Nest.js全栈开发终极实践:TypeORM+微服务+Docker构建高可用企业级应用
文章目录 **第一部分:认识Nest.js与基础环境搭建****1.1 什么是Nest.js?****1.2 环境准备****1.3 创建第一个项目****1.4 启动开发服务器****1.5 核心文件解读** **第二部分:基础控制器与路由****2.1 控制器的作用****2.2 创建自定义控制器**…...
20250310-组件基础2
通过插槽来分配内容 一些情况下我们会希望能和 HTML 元素一样向组件中传递内容: <AlertBox>传入的内容 </AlertBox> 我们期望能渲染成这样: 这可以通过 Vue 的自定义 <slot> 元素来实现: <template><div clas…...
Fedora41安装MySQL8.4.4
Fedora41安装MySQL8.4.4 Fedora41用yum仓库安装MySQL8.4.4 笔记250310下载安装启动mysqld服务查看生成的初始密码 , 用初始密码登录登录后,必须修改初始密码才能执行其它操作可选设置降低密码强度要求, 使用简单密码降低 validate_password 组件对密码强度的要求 用SET GLOBAL命…...
基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
NLP常见任务专题介绍(2)-多项选择任务(MultipleChoice)训练与推理模板
一、 使用 BigBird 进行多项选择任务训练与推理 本示例展示如何使用 BigBirdForMultipleChoice 训练一个多项选择模型,适用于考试答题、阅读理解、常识推理等任务。 1️⃣ 任务描述 目标:给定一个问题和多个选项,模型预测正确答案。 数据格式:输入包含 (问题, 选项1, 选项…...
java BCC异或校验例子
需求 对一个十六进制的字符串进行BCC校验 方法 private static String XORCheck(String rawMsg) {// 16进制字符串需要转成10进制数组进行校验,然后再返回16进制字符串用于与原来的字符匹配byte[] bytes HexDumpMsgFormat.hexStr2DesBytes(rawMsg);return BytesUt…...
Python第十六课:深度学习入门 | 神经网络解密
🎯 本节目标 理解生物神经元与人工神经网络的映射关系掌握激活函数与损失函数的核心作用使用Keras构建手写数字识别模型可视化神经网络的训练过程掌握防止过拟合的基础策略一、神经网络基础(大脑的数字化仿生) 1. 神经元对比 生物神经元人工神经元树突接收信号输入层接收特…...
若依-导出后端解析
针对若依框架微服务版本学习 若依导入导出功能的具体使用详见:后台手册 | RuoYi 1.导出逻辑: 导出文件的逻辑是先创建一个临时文件,等待前端请求下载结束后马上删除这个临时文件。但是有些下载插件,例如迅雷(他们是二…...
华为OD机试九日集训第1期 - 按算法分类,由易到难,循序渐进,提升编程能力和解题技巧,从而提高机试通过率(Python/JS/C/C++)
目录 一、适合人群二、本期训练时间三、如何参加四、数据结构与算法大纲五、华为OD九日集训第1期第1天、逻辑分析第2天、数组第3天、双指针第4天、map与list第5天、队列第6天、栈第7天、滑动窗口第8天、二叉树第9天、矩阵 六、国内直接使用满血ChatGPT4o、o1、o3-mini-high、Cl…...
Python 机器学习小项目:手写数字识别(MNIST 数据集)
本项目将使用 scikit-learn 库,基于 支持向量机(SVM) 模型来构建一个手写数字识别系统。数据集选用 MNIST,其中包含 0-9 的手写数字图像,每张图片是 88 像素的灰度图。 项目步骤 安装必要的库加载数据集数据预处理划…...
STM32中输入/输出有无默认电平
结论: 输入从严格意义上来讲没有默认高低电平之说 推挽输出模式: 在推挽输出模式下,STM32的GPIO引脚可以输出高电平和低电平。如果没有通过软件明确设置引脚的电平状态,STM32的某些型号(或特定情况下)可能会…...
webshell一些上传心得
我们以upload-labs为基础 一、前端拦截: 如第一关 工作方式: 直接在前端拦截 绕过方式: 因为没有限制后端,所有可以用bs 绕过前端修改格式即可 将需要上传的php文件改成jpg格式 使用burp suite 拦截上传后,使用re…...
ROS实践(二)构建Gazebo机器人模型文件urdf
目录 一、基础语法 1. urdf文件组成 2. robot根标签 3. link 和 joint标签 4. sensor标签 二、 实验:使用launch文件启动rviz查看机器人模型 1. 编写机器人模型的urdf文件。 2. 编写launch文件。 3. 运行launch,查看效果。 URDF(Unifi…...
Linux 入门:常用命令速查手册
目录 一.指令 1.pwd(显示所在路径) 2.ls(列出所有子目录与文件) 3.touch(创建文件) 4.mkdir(创建目录) 5.cd(改变所处位置) 6.rm(删除&…...
kali linux web扫描工具
Kali Linux是一款专为网络安全领域而打造的操作系统,提供了众多优秀的安全工具,其中就包括了强大的web扫描工具。Web扫描是网络安全检测的一个重要环节,它可以帮助安全专家检测网站的漏洞,提升网站的安全性。 Kali Linux中集成了…...
2路模拟量同步输出卡、任意波形发生器卡—PCIe9100数据采集卡
品牌:阿尔泰科技 型号: PCIe9100、PCIe9101、PXIe9100、PXIe9101 产品系列:任意波形发生器 支持操作系统:XP、Win7、Win8、Win10 简要介绍: 910X 系列是阿尔泰科技公司推出的 PCIe、PXIe 总线的任意波形发生器&…...


