ngnix网站服务详解

news2024/12/26 23:08:53

一 Nginx的简介

1 Nginx:

①Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新

②Nginx的主要使用场景: 虚拟主机,反向代理,缓存,http  

③可以跨平台,配置简单,内存消耗少,10个nginx才占用150M内存。

④使用的是epoll模型,这种模型是I/O多路复用技术(I/O多路复用是一种技术,它允许一个进程或线程监控多个网络连接,当其中某个或某几个连接有数据时,当前程序可以拿到网卡收到的数据进行下一步的处理;),异步非阻塞的模型(异步非阻塞模型可以提高程序的效率,在等待I/O操作完成的同时,可以继续执行其他代码。)

⑥nginx支持高并发连接,处理2-3万并发连接数,官方监测能支持5万并发。对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求。(实际操作,很多公司为了服务器的稳定,都会设置在20000个左右)

⑦成本低,且开源,稳定性高,宕机概率非常小;

⑧内置的健康检查功能,可以允许在服务器宕机的时候,做健康检查,再发送的请求就不会发给宕机的服务器,会重新提交到其他节点上。

Apache:

Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器 

nginx的缺点:

nginx有个不太友好的地方是,nginx不方便处理动态资源,可以进行动静分离,将动态请求交给后端程序去进行处理。

2 Apache与Nginx的区别 

1 nginx是轻量级,nginx比apache 占用更少的内存及资源;

2 静态处理,Nginx 静态处理性能比 Apache 高 ;

3 Nginx可以实现无缓存的反向代理加速,提高网站运行速度;

4 Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;

5 Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;

6 nginx是异步进程,基于事件的web服务器,多个连接对应一个进程 ;apache是同步多进程,基于流程的web服务器,单个线程处理单个请求;

7 Nginx高度模块化,编写模块相对简单,且组件比Apache少

8 nginx抗并发,nginx处理请求是异步非阻塞的,而Apache则是阻塞性的,在高并发下的nginx能够保持低资源,低消耗高性能。

9 nginx类似于速度,apache类似于功率.

10 nginx在负载均衡方面比较好,apache当流量进程达到极限时,将拒绝新的连接

Nginx对比Apache的优势: 

轻量级,nginx比apache 占用更少的内存及资源

静态处理,Nginx 静态处理性能比 Apache 高 

Nginx可以实现无缓存的反向代理加速,提高网站运行速度

Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件

Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级

nginx是异步进程,多个连接可以对应一个进程 ;apache是同步多进程,一个连接对应一个进程

Nginx高度模块化,编写模块相对简单,且组件比Apache少

高并发下nginx 能保持低资源低消耗高性能

Nginx 配置简洁, Apache配置复杂

apache相对于nginx的优点 :

Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
模块多,基本想到的都可以找到
少bug, nginx的bug相对较多
超稳定
Nginx处理动态请求是弱项,动态请求要Apache去做

3 Nginx的进程  

Apache和Nginx的默认端口都是80,当你发先Nginx启动失败,导致的原因可能就是80端口被占用,而导致服务启动失败,可以修改服务的端口,从而实现两个服务的同时进行

Nginx有两个进程:

master process:主进程(守护进程),用来管理工作进程,读取nginx的配置文件信息

worker process:工作进程,用来处理用户的连接请求

nginx的应用场景

1 可以做web服务器,nginx是一个http服务,可以独立地提供http服务,可以做静态服务器;

2 虚拟主机。可以实现一台服务器,虚拟多个站点,例如基于ip、不同端口、或者不同域名的站点

3 反向代理服务器,负载均衡。当网站的访问量达到一定的程度时,单台服务器就不能满足用户的请求,此时需要多台服务器集群,此时可以使用nginx做反向代理,并且多台服务器可以平均分担负载,不会让某台服务器负载高或者闲置。(也可以使用ip hash技术 进行负载均衡分配)

4 nginx中还可以配置安全管理,比如支持nginx搭建API接口网关,对每一个接口服务进行拦截;

5 nginx还能做缓存服务器;

Nginx 是如何实现高并发的?

 异步,非阻塞,使用了epoll 和大量的底层代码优化
如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数。正常情况下,会有很多进程一直在等待中
而nginx采用一个master进程,多个woker进程的模式
master进程主要负责收集、分发请求。每当一个请求过来时,master就拉起一个worker进程负责处理这个请求。同时master进程也负责监控woker的状态,保证高可靠性
woker进程一般设置为跟cpu核心数一致。nginx的woker进程在同一时间可以处理的请求数只受内存限制,可以处理多个请求
Nginx 的异步非阻塞工作方式正把当中的等待时间利用起来了。在需要等待的时候,这些进程就空闲出来待命了,因此表现为少数几个进程就解决了大量的并发问题

同步和异步

同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,这是一种可靠的服务序列。要么成功都成功,失败都失败,服务的状态可以保持一致

异步:一个服务的完成需要依赖其他服务时,只通知其他依赖服务开始执行,而不需要等待被依赖的服务完成,此时该服务就算完成了。被依赖的服务是否最终完成无法确定,因此它是一个不可靠的服务序列

阻塞与非阻塞

阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,函数只有在得到结果之后才会返回。

非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回

Nginx为什么不使用多线程?

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会耗光服务器资源

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发

二 编译安装Nginx服务

1 初步编译安装

关闭防火墙,将安装nginx所需软件包传到/opt目录下

systemctl stop firewalld

systemctl disable firewalld   开机不自启

setenforce 0

2 安装依赖包 

nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

3 创建运行用户、组

(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限) 

useradd -M -s /sbin/nologin nginx

4 编译安装Nginx

cd /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz

tar zxvf nginx-1.18.0.tar.gz -C /opt/

cd nginx-1.18.0/
 
./configure 

--prefix=/usr/local/nginx \		#指定nginx的安装路径

--user=nginx \					#指定用户名

--group=nginx \					#指定组名

--with-http_stub_status_module	#启用 http_stub_status_module 模块以支持状态统计
 
 
make -j2 && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		#让系统识别nginx的操作命令

ll /usr/local/sbin/



# make -j2 ##表示cpu有2核,使用2个cpu同时一起编译,make是将源代码翻译成二进制
# make install ##表示将二进制文件放到指定的目录中

三 Nginx的初始命令 

启动Nginx服务
nginx  -t  #检查nginx服务配置是否正确


/usr/local/sbin/nginx  #启动nginx服务


nginx  #快捷运行

 

启动nginx方法二
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		#让系统识别nginx的操作命令
##做软连接,创建二进制文件到PATH路径中
##一般是安装在/usr/local中,就放到/usr/local下的/sbin下
 
 
还有一种当时是在PATH环境变量中加入nginx程序的目录,这种不常用

启动nginx方法三

写进磁盘完成后进入部署的文件夹使用绝对路径启动nginx服务,然后查看是否有nginx进程

/apps/nginx/sbin/nginx 
#使用绝对路径启动nginx

ps aux |grep nginx
#查看是否有nginx进程

②停止nginx服务

cat /usr/local/nginx/logs/nginx.pid		#先查看nginx的PID号

kill -3 <PID号>

kill -s QUIT <PID号>

killall -3 nginx

killall -s QUIT nginx
多种方式可以查看nginx进程号
cat /usr/local/nginx/logs/nginx.pid   //查看nginx主进程的PID
 
pgrep nginx -l   //查看nginx的主进程号和工作进程号
 
lsof -i :80    //查看nginx的主进程号和工作进程号
 ​
ss -ntap | grep nginx  //查看nginx的主进程号和工作进程号
 ​
netstat -ntap | grep nginx  //查看nginx主进程的PID
③重载nginx服务
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx
④nginx的其余命令
①nginx -V 查看安装了那些模块

②nginx -v 查看版本号

③nginx -s 发送信号 后面可以跟stop、reload、quit、reopen

④nginx -t 检查著配置文件语法

nginx -g 修改执行用户ps aux |grep nginx中查看。需要注销配置文件中的user nginx中。nginx -g "daemon off"前台运行,默认后台运行容器中需要使用。

⑥nginx -c 指定配置文件,一般用于.service文件中

⑤日志分割,重新打开日志文件
[root@localhost logs]#ls
access.log  error.log  nginx.pid

[root@localhost logs]#mv access.log    access.`date +%F`.log

[root@localhost logs]#ls
access.2022-09-27.log  error.log  nginx.pid

[root@localhost logs]#kill -USR1 8468

[root@localhost logs]#ls
access.2022-09-27.log  access.log  error.log  nginx.pid

[root@localhost logs]#
⑤平滑升级 (马传斌这一点还得研究)

引入新的升级安装包:

 

3)nginx添加到系统服务 

我们使用yum安装的服务时,一般启动方式均为 :systemctl  服务名   操作 。对于源码安装后的nginx并不能直接像这样使用。所以我们可以通过脚本或则系统服务的更改来实现系统服务的启动方式

方式一:脚本方式

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11 个适用于 Windows电脑的最佳免费录制屏幕软件(2024)

屏幕录制软件可让您捕获屏幕以与他人共享并创建与产品相关的视频、教程、课程、演示、网络视频等。该软件使您能够从网络摄像头和屏幕录制视频。 11 个适用于 Windows电脑的最佳免费屏幕录像机 以下是精心挑选的顶级屏幕录像机列表&#xff0c;及其受欢迎的功能和网站链接。该…

Spring Boot与Feign:微服务架构下的优雅通信

1. 前言 本文将详细介绍在Spring Boot框架中如何使用Feign进行微服务之间的优雅通信。我们将从Feign的基本原理讲起&#xff0c;然后逐步展开使用Feign的完整流程和步骤&#xff0c;包括代码示例和详细注释。通过本文&#xff0c;读者将能够轻松掌握Feign在Spring Boot微服务架…

为什么发明个红黑树,这么设计的意义是什么?

1、红黑树是一种自平衡二叉树&#xff0c;查找时算法时间复杂度为O(log n)。 2、 假设你计算机里存有十亿个身份证信息&#xff0c;你要用计算机在这些身份证信息里进行增加、删除、查找等操作&#xff0c;应该怎样设计程序实现这些功能&#xff1f; 最简单的笨办法&#xf…

基于JAVA的智慧社区业务综合平台 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 业务类型模块2.2 基础业务模块2.3 预约业务模块2.4 反馈管理模块2.5 社区新闻模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 业务类型表3.2.2 基础业务表3.2.3 预约业务表3.2.4 反馈表3.2.5 社区新闻表 四、系统展…

超详细shell脚本小练...

1 、判断当前磁盘剩余空间是否有30G&#xff0c;如果小于30G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查-次磁盘剩余空间。 1.1.安装邮件服务 [rootnode ~]# df -m 文件系统 1M-块 已用 可用 已用% 挂载点 devtmpfs 7…

el-button 选择与非选择按钮批量处理

el-button 选择与非选择按钮批量处理 <el-button v-for"(voyage,i) in data[voyages][nowVoyage]":key"i"class"c-work-bts"type"primary":plain"nowWorkSpace!i"click"chooseWorkSpace(i)"size"small&qu…

week04day01(爬虫)

一. 爬虫 只爬取公开的信息&#xff0c;不能爬取未公开的后台数据 1.爬虫的合法性 法无禁止皆可为 -- 属于法律的灰色地带https://www.tencent.com/robots.txt -- 网站/robots.txt 可以查看禁止爬取的内容 2. URL Uniform Resource Locator 统一资源定位符https://www.…

小程序红包服务端请求一直是签名错误如何解决

当小程序红包服务端请求一直显示签名错误时&#xff0c;这可能是由于多种原因导致的&#xff0c;包括密钥错误、参数错误、签名算法错误、时间戳问题以及网络请求问题等。解决这个问题需要细心检查和分析&#xff0c;下面将简单的介绍一下如何针对这些可能的原因进行排查和解决…

获批上市:国产新一代长期型超小人工心脏

文章来源&#xff1a;心未来&#xff1b;编辑&#xff1a;白晓菲 近日&#xff0c;重庆永仁心医疗器械有限公司&#xff08;简称&#xff1a;"永仁心医疗"&#xff09;的新一代人工心脏产品EVA-Pulsar™左心室辅助装置正式获得NMPA医疗器械注册证&#xff0c;成为国…

【C语言】面试常考----- 内存函数memcpy和memmove的功能区别与模拟实现

1.memcpy 功能&#xff1a;把source指向的前num个字节内容拷贝到destination指向的位置去&#xff0c;可以拷贝任意类型的数据。 注&#xff1a;1.memcpy并不关心\0&#xff0c;毕竟传的也不一定是字符串&#xff0c;因此拷贝过程中遇到\0也不会停下来。 2.num的单位是字节&a…

(二十)springboot实战——springboot使用redis的订阅发布机制结合SSE实现站内信的功能

前言 在前面的章节内容中&#xff0c;我们介绍了如何使用springboot项目实现基于redis订阅发布机制实现消息的收发&#xff0c;同时也介绍了基于SSE机制的单通道消息推送案例&#xff0c;本节内容结合redis和sse实现一个常用的实战案例——站内信。实现系统消息的实时推送。 …

【C++】 类与对象——流操作符重载,const成员函数

类与对象 流操作符重载1 << 重载2 >> 重载 const 修饰Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 流操作符重载 流操作符功能<<输出操作符>>输…

2024 AI 大模型全栈开发知识体系【LLM 技术栈】

2023 年最火的一件事莫过于以 ChatGPT 为代表的 AI 大模型的兴起与应用探索&#xff0c;这一年大模型领域可以说是百花齐放&#xff0c;很多人都惊叹其在各行各业带来的影响。 有很多人说&#xff0c;AI 相对于当年的区块链、元宇宙有过之而无不及。 甚至于 2024 年 sora 的推出…

Python学习-列表1

十二、列表1 1、创建列表及基本运算 1&#xff09;使用中括号&#xff0c;将所有准备放入列表中的元素&#xff0c;包裹起来&#xff0c;不同元素之间使用逗号分隔。 举例&#xff1a; [1,2,3,4,5]2&#xff09;列表可以容纳不同类型的数据。 举例&#xff1a; [1,2,3,4,5,…

ETL快速拉取物流信息

我国作为世界第一的物流大国&#xff0c;但是在目前的物流信息系统还存在着几大的痛点。主要包括以下几个方面&#xff1a; 数据孤岛&#xff1a;有些物流企业各个部门之间的数据标准不一致&#xff0c;难以实现数据共享和协同&#xff0c;容易导致信息孤岛。 操作繁琐&#x…

【论文阅读】【yolo系列】YOLO-Pose的论文阅读

Abstract 我们介绍YOLO-pose&#xff0c;一种无热图联合检测的新方法&#xff0c;基于流行的YOLO目标检测框架的图像二维多人姿态估计。 【现有方法的问题】现有的基于热图的两阶段方法是次优的&#xff0c;因为它们不是端到端可训练的&#xff0c;训练依赖于surrogate L1 loss…

常用的消息中间件RabbitMQ

目录 一、消息中间件 1、简介 2、作用 3、两种模式 1、P2P模式 2、Pub/Sub模式 4、常用中间件介绍与对比 1、Kafka 2、RabbitMQ 3、RocketMQ RabbitMQ和Kafka的区别 二、RabbiMQ集群 RabbiMQ特点 RabbitMQ模式⼤概分为以下三种: 集群中的基本概念&#xff1a; 集…

unity学习(19)——客户端与服务器合力完成注册功能(1)入门准备

逆向服务器用了三天的时间&#xff0c;但此时觉得一切都值&#xff0c;又可以继续学习了。 服务器中登录请求和注册请求由command变量进行区分&#xff0c;上一层的type变量都是login。 public void process(Session session, SocketModel model) {switch (model.Command){ca…

Linux常见基本指令

本文将详细的介绍Linux中各常见指令的用法&#xff0c;并且在每个指令都有使用样例。一共有以下指令&#xff1a; 1. man指令 2.目录基础指令&#xff1a;2.1 pwd指令、2.2 ls指令、2.3 cd指令 3.文件创建与删除&#xff1a;3.1 touch指令、3.2 mkdir指令、3.3 rmdir 指令 &…

FL Studio21.2.3更新哪些新功能?中文汉化版如何下载

FL Studio 21.2.3的更新会带来一些变化&#xff0c;这些变化主要集中在以下几个方面&#xff1a; 功能增强和改进&#xff1a;随着版本的更新&#xff0c;FL Studio可能会引入一些新的功能或改进现有功能。这些新功能可能包括新的音频处理工具、效果器、虚拟乐器或混音选项&am…