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 多路复用
    使用操作系统提供的机制(如 epollkqueue)同时监控多个文件描述符(即连接),当任意一个描述符就绪时立即通知进程。

二.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 请求为例:

  1. 接收连接:Worker 进程通过 epoll 监听端口,接收客户端连接。

  2. 读取请求:若数据未到达(非阻塞),Worker 继续处理其他连接;若数据到达,读取并解析请求。

  3. 处理请求:若需读取静态文件,发起非阻塞文件 I/O 操作;若需代理到后端,发起非阻塞网络连接。

  4. 响应客户端:待所有操作完成后,通过事件回调将结果返回客户端。

   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:配置后端服务器具体地址,负载均衡配置不可或缺的部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程&#xff08;通用&#xff09;&#xff01; 当我们成功接入大模型时&#xff0c;可以选中任意代码区域进行解答&#xff0c;共分为三个区域&#xff0c;分别是选中区域、提问区域以及回答区域&#xff0c;我…

Python——计算机网络

一.ip 1.ip的定义 IP是“Internet Protocol”的缩写&#xff0c;即“互联网协议”。它是用于计算机网络通信的基础协议之一&#xff0c;属于TCP/IP协议族中的网络层协议。IP协议的主要功能是负责将数据包从源主机传输到目标主机&#xff0c;并确保数据能够在复杂的网络环境中正…

【LeetCode合并区间C++实现】【c++】【合并区间】

LeetCode合并区间C实现 LeetCode 56题思路图示完整代码运行结果代码或思路哪里有误还请指正&#xff01;&#xff01;thank you!! LeetCode 56题 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&am…

笔记六:单链表链表介绍与模拟实现

在他一生中&#xff0c;从来没有人能够像你们这样&#xff0c;以他的视角看待这个世界。 ---------《寻找天堂》 目录 文章目录 一、什么是链表&#xff1f; 二、为什么要使用链表&#xff1f; 三、 单链表介绍与使用 3.1 单链表 3.1.1 创建单链表节点 3.1.2 单链表的头插、…

使用Modelsim手动仿真

FPGA设计流程 在设计输入之后,设计综合前进行 RTL 级仿真,称为综合前仿真,也称为前仿真或 功能仿真。前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。在完成一个设计的代码编写工作之后,可以直接对代码进行仿真,…

Docker搭建Redis哨兵模式【一主两从三哨兵】

Docker搭建Redis哨兵模式 系统: CentOS 7 Dockder 版本: VMware虚拟机 网络适配器 网络连接 桥接模式:直接连接物理网络查看IP命令 ip addr一、哨兵模式概述 1. 官方文档与关联博客 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel关联博…

(更新完)LPZero: Language Model Zero-cost Proxy Search from Zero

LPZero代码 摘要 神经架构搜索 (NAS) 有助于自动执行有效的神经网络搜索&#xff0c;同时需要大量的计算资源&#xff0c;尤其是对于语言模型。零样本 NAS 利用零成本 (ZC) 代理来估计模型性能&#xff0c;从而显着降低计算需求。然而&#xff0c;现有的 ZC 代理严重依赖于深…

【互联网性能指标】QPS/TPS/PV/UV/IP/GMV/DAU/MAU/RPS

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…

【Linux docker】关于docker启动出错的解决方法。

无论遇到什么docker启动不了的问题 就是 查看docker状态sytemctl status docker查看docker日志sudo journalctl -u docker.service查看docker三个配置文件&#xff08;可能是配置的时候格式错误&#xff09;&#xff1a;/etc/docker/daemon.json&#xff08;如果存在&#xf…

拉取gitlab项目时出现500的错误的权限问题

title: 拉取gitlab项目时出现500的错误的权限问题 date: 2025-03-10 18:09:08 tags: gitlabgit拉取gitlab项目时出现500的错误的权限问题 Gitlab克隆代码**我遇到的问题错误**:**问题解决步骤**:1、确定你可以浏览器访问到项目页面2、确定你的邮箱或账号已添加,有权限可以拉…

MobileBERT: 一种适用于资源有限设备的紧凑型任务无关BERT

摘要 近年来&#xff0c;自然语言处理&#xff08;NLP&#xff09;通过使用具有数亿参数的巨大预训练模型取得了巨大成功。然而&#xff0c;这些模型存在模型体积庞大和延迟高的问题&#xff0c;使得它们无法部署到资源有限的移动设备上。在本文中&#xff0c;我们提出了Mobil…

【C】初阶数据结构9 -- 直接插入排序

前面我们学习了数据结构二叉树&#xff0c;接下来我们将开启一个新的章节&#xff0c;那就是在日常生活中经常会用到的排序算法。 所谓排序算法就是给你一堆数据&#xff0c;让你从小到大&#xff08;或从大到小&#xff09;的将这些数据排成一个有序的序列&#xff08;这些数据…

OpenPose初体验

最近机器人的热度有点高&#xff0c;想着要做些应用技术储备&#xff0c;偶然的机会发现了OpenPose&#xff0c;就从它开始吧&#xff01;OpenPose是由卡内基梅隆大学开发的开源实时多人姿态估计库。它基于深度学习算法&#xff0c;能精确识别图像或视频中的人体姿态&#xff0…

从0开始的操作系统手搓教程33:挂载我们的文件系统

目录 代码实现 添加到初始化上 上电看现象 挂载分区可能是一些朋友不理解的——实际上挂载就是将我们的文件系统封装好了的设备&#xff08;硬盘啊&#xff0c;SD卡啊&#xff0c;U盘啊等等&#xff09;&#xff0c;挂到我们的默认分区路径下。这样我们就能访问到了&#xff…

游戏辅助技术培训班教程【A001-初级班】

课程概述&#xff1a; 本教程为游戏辅助技术培训班的初级班课程&#xff0c;本章为第二阶段&#xff0c;旨在帮助学员系统掌握游戏辅助技术的核心技能。课程内容从C/C编程基础到高级内存操作、代码注入、DLL注入及MFC编程&#xff0c;全面覆盖游戏辅助开发的关键知识点。 课程…

day1 redis登入指令

[rootlocalhost data]# redis-cli -h ip -p 6379 -a q123q123 Warning: Using a password with -a or -u option on the command line interface may not be safe. ip:6379> 以上&#xff0c; Bigder

vue3深入组件——依赖注入

一、场景介绍:一般父子间信息传递是通过props,但是一个多层嵌套的组件,必须将其沿着组件逐级的传递下去,这就是props的逐级透传。 二、上述情况下,就需要用到provide 和 inject;一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多…

VUE3开发-9、axios前后端跨域问题解决方案

VUE前端解决跨域问题 前端页面需要改写 如果无效&#xff0c;记得重启服务器 后端c#解决跨域问题 前端js取值&#xff0c;后端c#跨域_c# js跨域-CSDN博客

国产编辑器EverEdit - 设置文件类型关联为EverEdit

1 设置-文件关联 1.1 应用场景 文件关联是指在文件管理器中双击某类型的文件&#xff0c;操作系统自动调用可以打开该文件的应用程序&#xff0c;比如&#xff1a;用户双击XXXX.txt文件&#xff0c;系统默认会使用记事本打开该文件。   由于各行各业都会定义特有的文件类型&…

【测试框架篇】单元测试框架pytest(4):assert断言详解

一、前言 用例三要素之一就是对预期结果的断言。 何为断言&#xff1f;简单来说就是实际结果和期望结果去对比&#xff0c;符合预期就测试pass&#xff0c;不符合预期那就测试 failed。断言内容就是你要的预期结果。断言包含对接口响应内容做断言、也包含对落DB的数据做断言。…