详解nginx优势以及应用场景,实操编译安装和nginx版本平滑升级

目录

一、nginx的特点

那么nginx有哪些特点?

先讲nginx的优点:

缺点:

二、nginx与Apache的区别

三、nginx的应用场景

四、nginx为什么能支持高并发

五、为什么nginx不使用多线程

六、nginx的两种进程分别有什么作用

七、编译安装nginx,并实现版本平滑升级

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

2.安装依赖包 

3.创建运行用户、组

4.编译安装Nginx

5.想要使用nginx命令直接启动服务,两种方式

 6.详解nginx的命令

7.nginx版本编译安装平滑升级的方式

8.使用systemd管理的两种办法

方法一:添加nginx系统服务,可以通用centos5-7三个版本

 方法二:使用systemd 进行管理


一、nginx的特点

首先介绍nginx是什么,再讲nginx的特点

nginx是一种轻量级/高性能的反向代理web服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议,他实现非常高效的反向代理、负载均衡,可以支持处理2-3万的并发连接数,官方检测能支持5万并发,目前在中国为主流的web服务器。(因为咱国家人多)

那么nginx有哪些特点?

先讲nginx的优点:

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

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

3、nginx支持高并发连接,处理2-3万并发连接数,官方监测能支持5万并发。

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

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

nginx的缺点:

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

二、nginx与Apache的区别

nginx和Apache的区别:
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能够保持低资源,低消耗高性能。

三、nginx的应用场景

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

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

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

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

5、nginx还能做缓存服务器;

四、nginx为什么能支持高并发

最核心的原因:nginx是异步,非阻塞,使用 epoll ,和并且可以进行简单的配置细节优化。

假设一个server采用一个进程(或者线程)负责一个请求的方式,那么进程的数量就是并发的数量,那么会有很多进程在等待中,等待网络的传输,非常耗时耗资源

但是nginx是使用了异步非阻塞的程序运行方式,解决了等待浪费时间的痛点,有一个专门进行调度进程,每次有一个request请求,就可以分配给worker进程去进行处理,web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。

五、为什么nginx不使用多线程

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

六、nginx的两种进程分别有什么作用

nginx有两种进程,master进程和worker进程

master进程:用于管理worker进程,读取nginx的配置文件信息

worker进程:处理连接请求

七、编译安装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
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/./configure \
--prefix=/usr/local/nginx \		#指定nginx的安装路径
--user=nginx \					#指定用户名
--group=nginx \					#指定组名
--with-http_stub_status_module	#启用 http_stub_status_module 模块以支持状态统计make -j2 && make install
make -j2 ##表示cpu有2核,使用2个cpu同时一起编译,make是将源代码翻译成二进制
make install ##表示将二进制文件放到指定的目录中

安装完成

5.想要使用nginx命令直接启动服务,两种方式

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

 6.详解nginx的命令

nginx -t
nginx -v
nginx -V
nginx -s 信号

##cat /usr/local/nginx/logs/nginx.pid 先查看nginx的pid
##停止nginx服务的三种方式
kill -3 <nginx的pid号> 
kill -s QUIT <nginx的pid号>
killall -3 nginx
killall -s QUIT nginx
nginx -s quit 
kill -1 <nginx的pid>
kill -s HUP <nginx的pid>
killall -1 nginx
killall -s HUP nginx
nginx -s reload

7.nginx版本编译安装平滑升级的方式

新版本升级:
tar xf nginx-1.25.3.tar.gz
cd nginx-1.25.3/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \  ##加上状态收集模块
--with-http_ssl_module    ##最新的版本需要加上ssl模块make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old   ##将原来的程序进行备份
cp objs/nginx /usr/local/nginx/sbin/nginx          ##将新编译好的二进制文件放到安装目录下
make upgrade  #要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx

8.使用systemd管理的两种办法

方法一:添加nginx系统服务,可以通用centos5-7三个版本

先创建一个nginx脚本文件
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20  ##这一步必须要有,其中 - 表示为任何级别都不开启,99为第99个程序启动,20为第20个程序关闭
#description:Nginx Service Control Script   ##脚本目的描述
COM="/usr/local/nginx/sbin/nginx"     ##nginx启动的绝对路径
PID="/usr/local/nginx/logs/nginx.pid"   ##nginx的pid号的文件
case "$1" in
start)$COM
;;stop)kill -s QUIT $(cat $PID)
;;restart)$0 stop$0 start
;;reload)kill -s HUP $(cat $PID)
;;*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1esac
exit 0
chmod +x /etc/init.d/nginx  ##给脚本加上执行权限
chkconfig --add nginx	##添加为系统服务
chkconfig --list nginx  ##查看运行级别中是否开机自启动
chkconfig --level 35 nginx on|off ##设置字符多用户和图形化界面可以开机自启动|关闭

service nginx start  ##启动
service nginx stop   ##关闭命令与/etc/init.d/nginx脚本中相呼应

 方法二:使用systemd 进行管理

vim /lib/systemd/system/nginx.service
[Unit] ##服务说明
Description=nginx  ##描述服务
After=network.target  ##依赖,当依赖的服务启动的时候再启动自定义的服务
[Service] ##服务运行参数的设置
Type=forking ##表示后台运行,使用启动类型应该同事指定PIDFile=,这样便于systemd能够追踪
PIDFile=/usr/local/nginx/logs/nginx.pid  ##指定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  ##服务安装的相关设置,可设置多用户

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

 需要注意的是:service启动和systemctl启动不能相互混用,使用其一即可

总结:nginx是一款可以轻量级(体现在内存消耗少),高性能(体现在抗高并发 ),能够实现反向代理(多台nginx服务的时候,做客户端和服务端的请求转发),并且可以做静态处理的web服务器。最牛的核心优势:支持异步非阻塞处理请求,使用的是epoll(I/O多路复用技术)!!!

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

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

相关文章

二叉搜索树——模拟

对于一个无穷的满二叉排序树&#xff08;如图&#xff09;&#xff0c;节点的编号是1,2,3&#xff0c;…。对于一棵树根为X的子树&#xff0c;沿着左节点一直往下到最后一层&#xff0c;可以获得该子树编号最小的节点&#xff1b;沿着右节点一直往下到最后一层&#xff0c;可以…

【办公软件】Win10/Win11复制粘贴必须刷新才能显示

更换了新的一台电脑&#xff0c;但是发现新建文件夹或是复制粘贴文件时&#xff0c;不管是在桌面还是在其他磁盘中都需要右击刷新一下才显示。让人很郁闷&#xff0c;比如新建一个文件夹不显示以为没有新建成功&#xff0c;导致重复建了好几个。 如何解决&#xff1f; 使用Wi…

一步解决 java.io.FileNotFoundException: 找不到文件异常

1.问题描述 java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp\localhost\uploads\image\20231206\2843cb16-9654-4e52-a757-76e3ca1f80ff.png (系统找不到指定的路径。) 2.原因分析 文件路径中的文件目录不存在 3.解决方案 方案一&#xff1a;如果…

行业研究:2023年中国游戏陪玩行业市场现状分析

近年来随着我国游戏行业的不断发展&#xff0c;我国游戏用户规模也是随着稳步上升&#xff0c;给游戏陪玩行业带来了稳定的用户基础。在用户规模增长的同时&#xff0c;随着经济、文化的快速发展&#xff0c;我国娱乐技能社交也随之逐渐兴起。而作为我国娱乐技能社交比重较大的…

Vue学习计划-Vue2--Vue核心(七)生命周期

抛出问题&#xff1a;一进入页面就开启一个定时器&#xff0c;每隔1秒count就加1&#xff0c;如何实现 示例&#xff1a; <body> <div id"app">{{ n }}<button click"add">执行</button> </div><script>let vm new …

一文搞懂Git版本控制系统

1. Git简介 当涉及到软件开发或协作时&#xff0c;版本管理是一个不可或缺的概念。无论你是一个独立开发者还是一个团队成员&#xff0c;都会遇到需要跟踪和管理代码变更的情况。这时候&#xff0c;Git作为一个强大而流行的版本控制系统就发挥着重要的作用。 Git&#xff08;读…

玩转大数据9:机器学习在大数据分析中的应用

1. 引言 在大数据时代&#xff0c;机器学习在大数据分析中扮演着至关重要的角色。本文介绍机器学习在大数据分析中的重要性和应用场景&#xff0c;并探讨Java中可用的机器学习库和框架。 2. 机器学习的基本概念和算法 机器学习是当今人工智能领域的一个关键分支&#xff0c;…

智慧园区可视化综合管理平台建设方案,智能化、数字化才是关键

园区作为城市的基本单元&#xff0c;是经济发展的重要载体。随着我国经济的快速发展&#xff0c;各类工业园区、办公园区等园区的规划建设也越来越多。伴随着互联网新兴技术的发展和应用&#xff0c;智慧园区已成为当今城市规划和社会发展的关注焦点&#xff0c;今天我们来介绍…

实战oj题——设计循环队列

前言&#xff1a;今天我们来实现循环队列。 各个接口的实现 创建队列&#xff1a; typedef struct {int* a;int front;int back;int k;} MyCircularQueue;我们的队列是由数组储存的&#xff0c;所以我们队列中得定义一个数组&#xff0c;front代表我们的首元素&#xff0c;ba…

腾讯云轻量应用服务器怎么安装BT宝塔面板?

腾讯云轻量应用服务器宝塔面板怎么用&#xff1f;轻量应用服务器如何安装宝塔面板&#xff1f;在镜像中选择宝塔Linux面板腾讯云专享版&#xff0c;在轻量服务器防火墙中开启8888端口号&#xff0c;然后远程连接到轻量服务器执行宝塔面板账号密码查询命令&#xff0c;最后登录和…

Gti GUI添加标签

通过Git Gui打开项目&#xff0c;通过菜单打开分支历史&#xff0c;我这里是名为"develop"的分支 选中需要打标签的commit&#xff0c;右键-Create tag即可 但貌似无法删除标签&#xff0c;只能通过git bash

卡码网语言基础课 | 20. 排队取奶茶

目录 一、 队列的基本认识 二、 队列的操作 2.1 引入头文件 2.2 创建队列 2.3 队列的常见操作 三、 解题 通过本次练习&#xff0c;将会学习到以下C知识点&#xff1a; 队列的基本概念&#xff08;队头、队尾&#xff09;和特点&#xff08;先入先出&#xff09;入队、出队…

Android : Xui- RecyclerView+BannerLayout 轮播图简单应用

实例图&#xff1a; 1.引用XUI http://t.csdnimg.cn/Wb4KR 2.创建显示图片布局 banner_item.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"…

【CentOS8】使用 Tomcat 部署 Java Web 项目(使用 sdkman)

文章目录 配置 Tomcat将 Tomcat 启动命令设置为 Linux 自定义服务给 Tomcat 设置管理员账号密码IDEA 打包 Java web 项目 我是使用 sdkman 下载的 jdk 和 tomcat&#xff0c;所以接下来的部署配置都是在 sdkman 构建的环境的。想要知道如何下载 sdkman 可以看看这篇文章 —…

计网实验7

解决&#xff1a;路由器用rip连接&#xff0c;主机通过域名访问&#xff0c;主机之间发送电子邮件 实验步骤 1.搞好部件 2.配好两台主机的ip,掩码&#xff0c;网关 3.连接一下两台主机&#xff0c;由于两台路由器没有连接&#xff0c;所以两台主机也无法连通&#xff0c;丢包率…

价格突然上涨,anzo Capital跟着专业交易者这样做

当交易市场价格突然上涨&#xff0c;让anzo Capital跟着专业交易者&#xff0c;如何操作进行盈利。 我们就以每日BTCUSD价格图为例。锁定交易区用红色突出显示。接下来有一个绿色区域&#xff0c;标志着当时看涨的专业交易者执行的缺口。此外&#xff0c;交易量有所增加&#…

Python实现FA萤火虫优化算法优化XGBoost回归模型(XGBRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

基于yolov2深度学习网络的人员跌倒检测识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 YOLOv2深度学习网络 4.2 人员跌倒检测识别原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; a…

0基础学java-day15

一、泛型 1 泛型的理解和好处 1.1 看一个需求 【不小心加入其它类型&#xff0c;会导致出现类型转换异常】 package com.hspedu.generic;import java.util.ArrayList;/*** author 林然* version 1.0*/ public class Generic01 {SuppressWarnings("all")public st…

汽车网络安全--ISO\SAE 21434解析(二)

1.风险评估方法 书接上文,我们正式开始对车灯系统的TARA分析,首先回顾下整车关于车灯系统描述: 可以比较肯定的是,我们定义的item为车灯系统,因此可以看到上图中画出了item boundary;同时定义出运行环境,个人理解,这块就是为TARA分析提供足够的环境支撑,不管是直接还…