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

news2025/2/25 8:38:50

目录

一、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 1

esac
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.coloradmin.cn/o/1289989.html

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

相关文章

web:[SUCTF 2019]CheckIn(一句话木马,.user.ini)

题目 页面显示 上传文件&#xff0c;随便上传一个文件试试 上传了一个文本&#xff0c;显示失败&#xff0c;不是图片 那就换图片马上传试试 不能包含<?,换一种写法&#xff0c;需要加上GIF89a&#xff0c;进行exif_imagetype绕过 上传成功 这里用.user.ini或者用post传参…

解决找不到msvcr120.dll无法执行代码的4个方法,快来看看解决方法!

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“缺少xxx.dll文件”。而msvcr120.dll就是其中之一。那么&#xff0c;msvcr120.dll到底是什么呢&#xff1f;它又有什么作用呢&#xff1f;本文将从多个方面对msvcr120.dll进行详细的解析…

CMMI5大成熟度等级和4大过程域

CMMI&#xff08;Capability Maturity Model Integration&#xff0c;能力成熟度模型集成&#xff09;模型系列是帮助组织改进其过程的最佳实践的集合。这些模型由来自产业界、政府以及软件工程研究所&#xff08;Software Engineering Institute&#xff0c; SEI&#xff09;的…

通用基座大模型是否可以超越领域专有大模型?微软最新论文证明这是可以的!微软最新动态Prompt技术——MedPrompt详解

本文来自DataLearnerAI官方网站&#xff1a;通用基座大模型是否可以超越领域专有大模型&#xff1f;微软最新论文证明这是可以的&#xff01;微软最新动态Prompt技术——MedPrompt详解 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051701842078748 在…

我不是DBA之慢SQL诊断方式

最近经常遇到技术开发跑来问我慢SQL优化相关工作&#xff0c;所以干脆出几篇SQL相关优化技术月报&#xff0c;我这里就以公司mysql一致的5.7版本来说明下。 在企业中慢SQL问题进场会遇到&#xff0c;尤其像我们这种ERP行业。 成熟的公司企业都会有晚上的慢SQL监控和预警机制。…

华为鸿蒙爆发真实力!原生应用媲美iOS,使用流畅度将提升20至30%

随着华为鸿蒙原生应用开发计划的启动&#xff0c;一场席卷全球的科技浪潮正在涌动。鸿蒙生态的快速发展&#xff0c;吸引了无数企业和开发者的关注&#xff0c;他们纷纷拥抱这个新兴的生态系统&#xff0c;共同构建一个更加繁荣的鸿蒙世界。 华为鸿蒙原生应用开发计划引爆全球…

IO / day04 作业

1.使用两个子进程完成两个文件的拷贝&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程用于回收两个子进程的资源 代码 #include <myhead.h>int main(int argc, const char *argv[]) {if(argc<3){printf("input error\n&q…

Python代码将txt里面多行json字符串转成excel文件

python 代码 将txt里面的多行json字符串转成excel history.txt文件json代码样例 Json转换Excel代码 import json import pandas as pddef json_out(file_path,excel_path):all_list[]with open(file_path, "r", encodingutf-8) as f:for line in f:all_list.append…

Linux动态库常见问题

1.编译好库后&#xff0c;应用程序调用&#xff0c;路径明明写对了&#xff0c;但是编译的时候却显示xxx未定义 2.编译好了却说不能打开动态库&#xff0c;没有此文件 ./jrtplib_test: error while loading shared libraries: libjrtp.so.3.11.2: cannot open shared object f…

【LeetCode热题100】【滑动窗口】无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为无…

11.机器人系统仿真搭建gazebo环境、仿真深度相机、雷达、RGB相机

目录 1 gazebo仿真环境搭建 1.1 直接添加内置组件创建仿真环境 1.2 urdf、gazebo、rviz的综合应用 2 ROS_control 2.1 运动控制实现流程(Gazebo) 2.1.1 已经创建完毕的机器人模型&#xff0c;编写一个单独的 xacro 文件&#xff0c;为机器人模型添加传动装置以及控制器 …

Kontakt v7.7.2(音频采样器)

Native Instruments Kontakt 7是一款强大的软件采样器&#xff0c;它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库&#xff0c;包括乐器、合成器、鼓组和声音效果等。此外&#xff0c;Kontakt 7还允许用户创建自己的采样库&#xff0c;以便根据自己的需要…

Java异常讲解

&#x1f435;本篇文章将对异常相关知识进行讲解 一、异常的结构 在程序执行的过程中出现的一些问题叫做异常&#xff0c;异常其实是一个一个类&#xff0c;每一种异常都代表一个类 1.1 几种常见的异常 System.out.println(10/0); //算数异常 //Exception in thread "m…

QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』

前文链接&#xff1a;QGraphicsView实现简易地图6『异步加载-单瓦片-无底图』 前一篇文章提到的异步单瓦片加载&#xff0c;是指线程每准备好一个瓦片数据后&#xff0c;立刻抛出信号让主线程加载。而本篇异步多瓦片加载是指线程准备好所有瓦片数据后&#xff0c;一起抛出信号让…

flink中处理kafka分区的消息顺序

背景 kafka分区的消息是有序的&#xff0c;那么flink在消费kafka分区的时候消息的顺序是怎么样的呢&#xff1f;还能保持这个有序性吗&#xff0c;本文就来记录下 flink消费kafka分区的顺序性 从上图可知&#xff0c;flink的转换算子比如map&#xff0c;flatMap&#xff0c;f…

D. In Love

贪心&#xff0c;维护最靠左的右端点以及最靠右的左端点 // Problem: D. In Love // Contest: Codeforces - Codeforces Round 905 (Div. 3) // URL: https://codeforces.com/contest/1883/problem/D // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Edi…

C语言--每日练习题--Day38

第一题 1. 下列代码的运行结果&#xff08;&#xff09; short i 65537; int j i 1; printf("i%d,j%d\n", i, j); A&#xff1a;i 65537&#xff0c;j 65538 B&#xff1a;i 1&#xff0c;j 2 C&#xff1a;i -1&#xff0c;j 0 D&#xff1a;i 1&#xff…

多向通信----多人聊天

package 多人聊天; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; publ…

Xcode15 Library ‘iconv.2.4.0‘ not found

Xcode 15运行老代码报错&#xff1a;Library iconv.2.4.0 not found 解决&#xff1a; TARGETS-->Bulid Phases --> Link Binary With Libraries 添加一个“Libiconv.tbd”, 同时把原来的 “libiconv.2.4.0.tbd”删除&#xff08;一定要删除&#xff0c;不然运行还是…

微服务开发:断路器详解

微服务是目前业界使用的最重要的实现方面。通过使用微服务架构&#xff0c;开发人员可以消除他们以前在单体应用程序中遇到的许多问题。展望未来&#xff0c;人们开始在微服务中搜索和采用各种模式。大多数时候&#xff0c;新模式的产生是为了解决另一个模式中出现的常见问题。…