【Web服务应用】Nginx服务

news2024/12/23 7:54:15

Nginx服务

  • 一、Nginx概述
    • 1.1Nginx特点
    • 1.2Nginx作用
    • 1.3Nginx与Apache的差异
  • 二、Nginx进程模型
  • 三、编译安装Nginx
    • 3.1Nginx服务的检查、启动、停止,重载
    • 3.2平滑升级
    • 3.3把nginx进程加入到系统服务当中
  • 四、Nginx服务的主配置文件nginx.conf
    • 4.1补充什么是IO多路复用
    • 4.2根目录与别名目录
  • 五、模块配置
    • 4.1状态统计模块
    • 4.2用shell脚本统计当前Web的并发量

一、Nginx概述

  • Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。

1.1Nginx特点

  • 高并发、高性能;
  • 模块化架构使得它的扩展性非常好;
  • 异步非阻塞的事件驱动模型这点和 Node.js 相似;
  • 相对于其它服务器来说它可以连续几个月甚至更长而不- 需要重启服务器使得它具有高可靠性;
  • 热部署、平滑升级;
  • 完全开源,生态繁荣;

1.2Nginx作用

Nginx 的最重要的几个使用场景

  • (1)静态资源服务,通过本地文件系统提供服务;
  • (2)反向代理服务,延伸出包括缓存、负载均衡等;
  • (2)API 服务, OpenResty ;
    对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但 Nginx 和 Node.js 并不冲突,都有自己擅长的领域。 Nginx 擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js 更擅长上层具体业务逻辑的处理,两者可以完美组合。

用一张图表示:

在这里插入图片描述

1.3Nginx与Apache的差异

  • Nginx是一个基于事件的Web服务器,Apache是一个甚于流程的服务器。
  • Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求:
  • Nginx避免子进程的概念,Apache是其于子进程的;。- - - Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般:。
  • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件·Nginx支持热部署,Apache不支持热部害:
  • Nginx对于静态文件处理具有更高效率,Apache相对一般
  • Nginx在反向代理场景具有明显优势,Apache相对一般

二、Nginx进程模型

在这里插入图片描述

  • 多进程:一个 Master 进程、多个 Worker 进程

  • Master 进程:管理 Worker 进程

  • 1.对外接口:接收外部的操作(信号)
  • 2.对内转发:根据外部的操作的不同,通过信号管理 Worker
  • 3.监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
  • Worker 进程:所有 Worker 进程都是平等的
  • 1.实际处理:网络请求,由 Worker 进程处理
  • 2.Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。

在这里插入图片描述

三、编译安装Nginx

#1.关闭防火墙
systemctl stop firewall
setenforce 0
#2.fnginx的配置及运行需pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件
yum -y install pore-devel zlib-devel openssl-devel gcc gcc-c++ make
#3. 创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
#4.编译安装
 tar xf nginx-1.22.0.tar.gz
  cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx #指定Nginx的安装路径
--user=nginx \  # 指定用户名
--group=nginx \ # 指定组名
--with-http_stub_status_module # 启用http_stub_status_module模块支持状态统计
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

3.1Nginx服务的检查、启动、停止,重载

# 查看Nginx服务是否正常
nginx -t
 #使用绝路路径启用服务
/usr/local/nginx/sbin/nginx
#用kill关闭进程
netstat -lntp | grep nginx
cat /usr/local/nginx/logs/ngins.pid #查看PID
kill  72347 #根据进程PID关闭服务
killall nginx #根据进程名关闭服务
kiall -0 nginx #查看进程是否存在,可以查看服务是否开启
#重载
kill -1  PID号
kill -s HUP nginx
killall -1 PID号
#日志分割
kill -USR1 <PID号>

3.2平滑升级

cd /opt/
#解压新版软件包
tar xf ngix1.XXXX 
cd nginx1.XXX
#安装软件模块
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
#编译,不要安装
make
#把原来的服务文件移走
cd /usr/local/nginx/sbin/
mv nginx nginx_old
cd /opt/nginx/nginx-1.24.0
#把新的文件移过去,注意,服务要开启
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade

3.3把nginx进程加入到系统服务当中

方法二:

cd /etc/init.d
#!/bin/bash
#chkconfig: 35 22 88
#desc:this is nginx service control scprit

CMD="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"

case "$1" in
start)
  netstat -lntp | grep nginx &> /dev/null
  if [ $? -eq 0 ];then
    echo "nginx已经启动"
  else
    ehco  "nginx正在启动"
    $CMD
  fi
  ;;
stop)
  kill -9 $(cat $PID) &> /dev/null
 # netstat -lntp | grep nginx &> /dev/null
  if [ $? -eq 0 ];then
    echo "ngix服务已经关闭"
  else
    echo "nginx服务关闭失败"
  fi
  ;;
restart)
  $0 stop
  $0 start
  ;;
renx &> /dev/nullnetstat -lntp | grep nginx &> /dev/nullload)
        Require all granted
  kill -1 $(cat $PID)  &> /dev/null
  if [ $? -eq 0 ];then
    echo "nginx服务已经重载"
  else
    echo "nginx服务重载失败"
  fi
  ;;
status)
  netstat -lntp | grep nginx &> /dev/null
  if [ $? -eq 0 ];then
    echo "nginx已经启动"
  else
    echo  "nginx服务未启动"
  fi
  ;;
*)
  echo "请输入start、stop、restart、reload、status"
esac
chmod +x nginx
chkconfig --add nginx

方法二:

cd /lib/systemd/system
vim nginx.service

[Util]
Description=nginx #服务的描述
After=network.target #依赖关系

[Service] #设置服务管理参数
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid #PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx  #启动服务
ExecStop=/bin/kill -s QUIT $MAINPID # 根据PID重载配置
ExecReload=/bin/kill -s HUP $MAINPID #更加PID终止进程
PrivateTmp=true
[Install] #服务安装
WantedBy=multi-user.target  #启动级别

四、Nginx服务的主配置文件nginx.conf

1.配置文件模块

1、全局块:全局配置,对全局生效;
2、events块:配置影响Nginx服务器与用户的网络连接;
3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
4、server块:配置虚拟主机的相关参数,一个http 块中可以有多个server块;
5、location块:用于配置匹配的 uri;
6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。
2.配置文件解释

vim /usr/local/nginx/conf/nginx.conf

#user nobody;			      	#运行用户,若编译时未指定则默认为nobody
worker_processes 1;			  	#工作进程数量,一般设置为和cPu核数一样;设置为auto,nginx将会自己获取这个数值
#error_log logs/error.log;		#错误曰志文件的位置
#pid logs/ nginx.pid;			#PID 文件的位置
worker_rlinit_nofile 60000;		#设置所有worker进程最大可以打开的文件数,默认为1024
#设置worker进程最大打开文件数,不能超过系统的最大文件数配置
ulimit -a #查看系统限制可以查看文件数量限制
ulimit -t #临时修改
vim /etc/security/limits.conf  #永久修改系统限制文件位置 
#底行添加
soft nofile 60000  #软限制
hard nofile 60000  #硬限制


3. I/O 事件配置

events {
	use epoll;					#使用epoll I/o模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
	worker_connections 60000 ;	#每个进程处理60000个连接
	multi_accept on;			#是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接
	accept_mutex on;			#默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
}

#如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因
为系统为每个TCP连接都要创建一个socket
句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
#epoll是lLinux内核为处理大批句柄而作改进的poll,是Linx下多路复用IO接口lTselect/pol1的增强板本,它能显著的减少程序在大量并发连按中只有少量活跃的情况下的系统CPU利用率。
#worker_prcesses的值和work_connections的值决定了最大并发数量,最大并发数计算方式为: worker_prcesseswork_connections。但在反向代理场景中计算方法不同,因为nginx既要维持和客户路的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为: worker_prcesseswork_connections/2。
在这里插入图片描述

4.HTTP 配置

http {
	##文件扩展名与文件类型映射表
	include mime. types;
	##默认文件类型
	default_type application/octet-stream;
	##日志格式设定
	#log_format main  	'Sremote addr - $remote user [$time local] "$request" '
	#					'$status $body_bytes_sent "$http referer" '
	#					'"$http user agent" "shttp x forwarded for"';
	##访问日志位置
	#access_log logs/access.logmain;
	##开启文件传输模式
	sendfile 		on; 
	#只在sendfile on时有效。调用tcp_cork方法,让数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵赛。默认为off。
	#tcp_nopush 	on;
	##连接保持超时时间,单位是秒
	#keepalive_timeout   0;
	keepalive_timeout   65;
	##gzip模块设置,设置是否开启gzip压缩输出
	#gzip  on;
	
	##web服务的监听配置
	server {
		##监听地址及端口
		listen 80;
		##站点域名,可以有多个,用空格隔开
		server_name www.kgc.com;
		##网页的默认字符集
		charset utf-8;
		##根目录配置
		location / {
			##网结根目录的位置/usr/local/nginx/html
			root html;
			##默认首页文件名
			index index.html index.php;
		}
		##内部错误的反馈页面
		error_page 500 502 503 504 /50x.html;
		##错误页面配置
		location = /50x.html {
			root html;
		}
	}
}

4.日志格式设定
在这里插入图片描述

$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区;
$request:用来记录请求的url与http协议;
$status:用来记录请求状态,成功是200;
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote _add拿到的IP 地址是反向代理服务器的ip地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

location常见配置指令

location常见配置指令,root、 alias、 proxy_pass root(根路径配置) : root
/var/www/html 请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html

alias (别名配置) : alias /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html

proxy _pass(反向代理配置〉

4.1补充什么是IO多路复用

什么是阻塞与非阻塞 和同步与异步

阻塞 I/O:这种模式下一个用户进程在发起一个 I/O 操作之后,只有收到响应或者超时才可进行处理其它事情,否则 I/O 将会一直阻塞。以读取磁盘上的一段文件为例,系统内核在完成磁盘寻道、读取数据、复制数据到内存中之后,这个调用才算完成。阻塞的这段时间对 CPU 资源是浪费的。

非阻塞 I/O:这种模式下一个用户进程发起一个 I/O 操作之后,如果数据没有就绪,会立刻返回(标志数据资源不可用),此时 CPU 时间片可以用来做一些其它事情。
同步 I/O:应用发送或接收数据后,如果不返回,继续等待(此处发生阻塞),直到数据成功或失败返回。
异步 I/O:应用发送或接收数据后立刻返回,数据写入 OS 缓存,由 OS 完成数据发送或接收,并返回成功或失败的信息给应用。Node.js 就是典型的异步编程例子。
什么是IO多路复用:IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个线程

epoll模型:是Linux特有的IO多路复用机制,自从2.5.44内核版本引入后成为主流。它使用基于事件的方式来管理文件描述符,使用一个事件表(event table)来保存文件描述符和事件信息,并提供了epoll_create()、epoll_ctl()和epoll_wait()等函数来操作事件表。

4.2根目录与别名目录

根目录
location /accp {
root /var/www/html;
这里的“/” 代表的是/var/ww/html

在这里插入图片描述
在这里插入图片描述

别名目录
location /accp {
alias /var/www/html;
这里的 /accp 指定是/var/www/html

在这里插入图片描述

在这里插入图片描述

五、模块配置

cd  /opt/nginx/nginx-1.24.0/auto
cat  cat options | grep YES #存放可用模块配置文件
--without-http_charset_module # 关闭模块,需要编译安装,配置软件模块时关闭,或者添加开启需要的模块
nginx -v #查看版本信息


4.1状态统计模块

在这里插入图片描述
在这里插入图片描述curl命令
在这里插入图片描述

4.2用shell脚本统计当前Web的并发量

#!/bin/bash
a=$(curl -Ls 192.168.243.102/status | awk '/Active/{print $3}') #获取并发量
while true;do
if [ $a -gt 2 ];then #大于2个报警
  echo "并发量过高!当前并发量$a"
fi
sleep 10  #每10秒循环一次脚本
done
~    

在这里插入图片描述

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

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

相关文章

R语言:移动平均计算及绘图

问题描述 现在有一个分日期记录DAU的数据&#xff0c;现在需要绘制其360,180,90,30,7日移动平均值&#xff0c;来观测消除了波动干扰的DAU趋势 (实际移动在股价趋势图上非常常见) 原始数据格式如下&#xff1a; day &#xff08;character&#xff09; dau &#xff08;int…

Docker+Jenkins+Gitee自动化部署maven单模块项目

1.简介 各位看官老爷&#xff0c;本文为Jenkins实战&#xff0c;注重实际过程&#xff0c;阅读完会有以下收获&#xff1a; 了解如何使用Docker安装Jenkins了解如何使用Jenkins部署maven项目了解如何使用JenkinsGitee实现自动化部署 2.Jenkins介绍 相信&#xff0c;正在读这…

2023年上半年软件设计师上午真题及答案解析

1.计算机中&#xff0c;系统总线用于( )连接 A.接口和外设 B.运算器&#xff0c;控制器和寄存器 C.主存、外设部件 D.DMA控制器和中断控制器 2.在由高速缓存、主存和硬盘构成的三级存储体系中&#xff0c;CPU执行指令时需要读取数据&#xff0c;那么DMA控制…

深入理解Linux虚拟内存管理(一)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核&#xff08;一&#xff09; 深入理解 Linux 内核&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;三&#xf…

ubantu换配置源

文章目录 1.配置镜像源位置2.进入终端&#xff0c;切换到/home/user/etc/apt/3.默认这个文件是只读的&#xff0c;我们修改一下权限4.修改之前&#xff0c;我们先备份一下系统原来配置的源5.开始修改&#xff0c;打开/etc/apt/sources.list文件&#xff0c;将原来的内容删除&am…

chatgpt赋能python:Python代码怎么打包-全面介绍

Python 代码怎么打包 - 全面介绍 Python 是一种高效、易学易用、灵活多变的编程语言。对于 Python 开发者来说&#xff0c;如何将其编写的程序打包是一个必须掌握的技能。本文将着重介绍 Python 代码打包的方法及其优势&#xff0c;并提供一些实用的工具和技巧。 什么是打包?…

六级备考17天|2017年12月三套真题|翻译与写作|20:45~21:00

目录 第一套 翻译&#xff1a;太湖 中文 英文 词汇 作文 谚语题&#xff1a;respect others, and you will be respected 第二套 翻译&#xff1a;青海湖 中文 英文 词汇 第一套 翻译&#xff1a;太湖 中文 英文 词汇 太湖 Lake Tai 淡水湖 fre…

python+vue学生选课学习成绩分析及可视化分析系统

但目前国内的学习成绩分析及可视化分析信息仍然都使用人工管理&#xff0c;随着学校规模越来越大&#xff0c;同时课程信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而学习成绩分析及可视化分析能很好地解决这一问题&#xff0c;轻松应对学习成…

2020第十一届蓝桥杯Python组国赛【真题+解析+代码】

&#x1f381;2020第十一届蓝桥杯python组国赛真题 &#x1f680; 真题练习&#xff0c;冲刺国赛 &#x1f680; 2020年第十一届蓝桥python组国赛真题解析代码 博观而约取&#xff0c;厚积而薄发 &#x1f3c6;国赛真题目录 文章目录 &#x1f381;2020第十一届蓝桥杯python组国…

本地部署Jellyfin影音服务器【公网远程影音库】

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 转载自cpolar极点云的文章&#xff1a;零基础搭建私人影音媒体平台【远程访问Jelly…

华为OD机试真题 Java 实现【数组的中心位置】【2023Q1 100分】

一、题目描述 给你一个整数数组nums,请计算数组的中心位置,数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。数组第一个元素的左侧积为1,最后一个元素的右侧积为1。如果数组有多个中心位置,应该返回最靠近左边的那一个,如果数组不存在…

chatgpt赋能python:Python代码转为C语言——提高效率的必经之路

Python代码转为C语言——提高效率的必经之路 Python是一种高级编程语言&#xff0c;具有易学易用的优点&#xff0c;因此越来越多的程序员选择使用Python来开发应用程序和脚本。但是&#xff0c;在开发高性能应用程序时&#xff0c;Python的效率问题会成为拦路虎。因此&#x…

每日一题——逆波兰表达式求值(前缀、中缀、后缀表达式的说明,库函数atoi()的解析)

文章目录 每日一题逆波兰表达式求值中缀&#xff0c;前缀&#xff08;波兰&#xff09;&#xff0c;后缀&#xff08;逆波兰&#xff09;表达式的基本概念逆波兰表达式的优点和计算方法优点计算方法 思路函数原型如何将数字入栈库函数atoi() 实现代码 每日一题 逆波兰表达式求…

chatgpt赋能python:Python代码转换:如何将代码从Python2转换为Python3

Python 代码转换&#xff1a;如何将代码从 Python 2 转换为 Python 3 作为一位有10年 Python 编程经验的工程师&#xff0c;我们都知道 Python 的两个主要版本&#xff1a;Python 2 和 Python 3。不过&#xff0c;Python 2 已于2020年正式停止支持&#xff0c;因此&#xff0c…

MySQL-7-权限与密码

一、用户授权与权限撤销 1.1、用户授权: 赋予权限:grant all on *.* to root192.168.4.% identified by "123456";从网络访问本地数据库时:只有 增删改查权限,本地登录则有所有权限。 新建用户,并赋予权限:格式&#xff1a;grant 权限列表 on 库名.表名 to 用户…

图数据库的一些概览

图数据库 图数据库是一种根据节点和边存储数据的数据库。数据以非常灵活的方式存储&#xff0c;无需遵循预定义的模型。该图形成了两个节点之间的关系&#xff0c;这种关系可以是有向的也可以是无向的。这些数据库旨在处理数据/节点之间的复杂关系。 节点用于存储数据。每个节…

chatgpt赋能python:Python-高效的SEO工具

Python - 高效的SEO工具 Python作为一种高效且易于学习的编程语言&#xff0c;广泛应用于各种领域&#xff0c;包括机器学习、数据分析、网站开发等。Python的灵活性和可扩展性也使它成为一种优秀的SEO工具。 Python在SEO中的应用 Python可用于SEO行业中的多个方面。例如&am…

IDEA内操作框文件地址生成+IDEA数组传参处理+springboot缺少依赖问题

1&#xff0c;IDEA内查询文件本地所属位置 首先在输入框内我们输入以下指令即可查询该目录下文件&#xff1a; lscd即是可进入指定目录 这样我们即可进行文件浏览与进入文件等操作 pwd即可生成该文件目录下的文件地址 2&#xff0c;IDEA数组传参处理 当结果是以数组形式被输…

chatgpt赋能python:Python信息查询的完全指南

Python信息查询的完全指南 Python是一种开源、解释性高级编程语言&#xff0c;广泛应用于数据科学、机器学习、人工智能、Web开发和自动化任务等领域。Python的简洁易读、高效快速的特点&#xff0c;使其成为程序员和企业的首选语言。然而&#xff0c;学习Python并不容易&…

Docker v24.0.0 发布

导读Docker 24.0.0 现已发布&#xff0c;具体更新内容如下&#xff1a; New 引入对 containerd 作为内容存储的实验性支持&#xff08;替换现有的存储驱动程序&#xff09;。moby/moby#43735, other moby/moby pull requests--hostCLI flag 现在支持 ssh:// 主机地址中的路径组…