IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx网站服务详解(第一部分:编译安装及系统服务添加) -> 正文阅读

[系统运维]Nginx网站服务详解(第一部分:编译安装及系统服务添加)

内容预知

?1. Nginx的相关知识

?1.1 Nginx的简介

?1.2? Apache与Nginx的区别

1.3? Nginx的进程?

?同步,异步,阻塞,非阻塞的概念补充

2.?编译安装Nginx服务

2.1 初步编译安装?

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

?2.1.2?安装相关的依赖包

?2.1.3?创建用户组以及编译安装

2.2? Nginx的初始命令

2.2.1 启动nginx服务

?2.2.2 停止nginx服务

2.2.3 重载nginx服务?

2.2.4?日志分割,重新打开日志文件?

?2.2.5?平滑升级

2.3 nginx添加到系统服务?

?方式一:脚本方式

?方式二: 在主服务中(/lib/systemd/system/)添加nginx服务配置


?1. Nginx的相关知识

?1.1 Nginx的简介

Nginx:

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

对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求。(实际操作,很多公司为了服务器的稳定,都会设置在20000个左右

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

Apache:

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

?1.2? Apache与Nginx的区别

NginxApache
nginx是一个基于事件的web服务器apache是一个基于流程的服务器
所有请求都由一个线程处理单个线程处理单个请求
nginx避免子进程的概念apache是基于子进程的
nginx类似于速度apache类似于功率
nginx在内存消耗和连接方面比较好apache在内存消耗和连接上没有提高
nginx在负载均衡方面表现较好当流量到达进程极限时,apache将拒绝新的连接。
nginx不支持IBMI和openvms一样的osapache支持更多的os
nginx只具有核心功能apache提供了比nginx更多的功能
nginx的性能和可伸缩性不依赖于硬件apache依赖于cpu和内存等硬件组件
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去做。

1.3? Nginx的进程?

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

Nginx有两个进程:

master process:主进程(守护进程),用来管理工作进程。

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

?

经典问题1:Nginx 是如何实现高并发的??

异步,非阻塞,使用了epoll 和大量的底层代码优化。

如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数。正常情况下,会有很多进程一直在等待中。

而nginx采用一个master进程,多个woker进程的模式。

master进程主要负责收集、分发请求。每当一个请求过来时,master就拉起一个worker进程负责处理这个请求。同时master进程也负责监控woker的状态,保证高可靠性


woker进程一般设置为跟cpu核心数一致。nginx的woker进程在同一时间可以处理的请求数只受内存限制,可以处理多个请求。


Nginx 的异步非阻塞工作方式正把当中的等待时间利用起来了。在需要等待的时候,这些进程就空闲出来待命了,因此表现为少数几个进程就解决了大量的并发问题。


?同步,异步,阻塞,非阻塞的概念补充

?同步和异步


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


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


阻塞与非阻塞


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


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


经典问题2:Nginx为什么不使用多线程?

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

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

2.?编译安装Nginx服务

2.1 初步编译安装?

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

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

?

?2.1.2?安装相关的依赖包

??

#nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

?2.1.3?创建用户组以及编译安装


[root@localhost opt]#useradd -M -s /sbin/nologin nginx

[root@localhost opt]#tar zxvf nginx-1.12.2.tar.gz -C /opt/


[root@localhost opt]#cd nginx-1.12.2/
[root@localhost nginx-1.12.2]#./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module

?

make && make install

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

?

2.2? Nginx的初始命令

2.2.1 启动nginx服务

#检查nginx服务配置是否正确
nginx  -t
#启动nginx服务
/usr/local/sbin/nginx
#快捷运行
nginx

?

?2.2.2 停止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

2.2.3 重载nginx服务?

kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx

?

2.2.4?日志分割,重新打开日志文件?

[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]#

?2.2.5?平滑升级

?引入新的升级安装包:

tar -zxvf nginx-1.22.0.tar.gz 
cd nginx-1.22.0
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module

?编译安装新的nginx升级软件包:

#编译安装
make
#将老版本的nginx进行备份,防止升级失败,还原
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
 #将新的运行文件放入安装的运行目录
cp objs/nginx /usr/local/nginx/sbin/nginx

?

?平滑升级:

make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade  

2.3 nginx添加到系统服务?

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

?方式一:脚本方式

vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 2345  20 90
#description:This is Nginx Service Control Script
CMD="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/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

chmod +x /etc/init.d/nginx
chkconfig --add nginx						
systemctl stop nginx
systemctl start nginx

?方式二: 在主服务中(/lib/systemd/system/)添加nginx服务配置

?实验前准备:

[root@localhost init.d]#mkdir nginx.old
[root@localhost init.d]#mv nginx   ./nginx.old/

?开始执行第二种方式:

vim /lib/systemd/system/nginx.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

?

[root@localhost init.d]#vim /lib/systemd/system/nginx.service
[root@localhost init.d]#chmod 754 /lib/systemd/system/nginx.service
[root@localhost init.d]#systemctl daemon-reload
[root@localhost init.d]#systemctl start nginx
[root@localhost init.d]#systemctl status nginx

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:24:17  更:2022-09-30 01:27:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:43:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码