nginx服务与调优(一)

news2024/10/6 22:30:31

一、nginx概述:

1.Nginx简介:

  Nginx是一个高性能的HTTP和反向代理服务器。是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器,单台物理服务器可支持30 000~50 000个并发请求。

2.基础特性:

  • 模块化设计,较好的扩展性

  • 高可靠性

  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件

  • 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

  • event-driven,aio,mmap,sendfile

Apache:

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

  3、Nginx和Apache最核心的区别:

  • nginx并发性比较好, CPU占用内存低,如果rewrite频繁,选用apache最佳。
  • Nginx处理静态文件好, 耗费内存少,只适合静态和反向。
  • apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。
  • Apache在处理动态有优势。

二、I/O模型:

  1.分类:

  • 磁盘I/O 磁盘I/O是进程向内核发起系统调用,请求磁盘上的某个资源比如是html 文件或者图片,然后内核通过相应的驱动程序将目标文件加载到内核的内存空间,加载完成之后把数据从内核内存再复制给进程内存,如果是比较大的数据也需要等待时间
  • 网络I/O : 一切皆文件,本质为对socket文件的读写 网络通信就是网络协议栈到用户空间进程的IO就是网络IO

      I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。

  2.网络I/O的过程:

  1.  当用户发起 http 请求需要请求一个index.htm网页文件
  2. 客户端请求与服务器端 建立连接,建立连接后,会发送请求报文
  3.  服务端的网卡收到请求报文, 会将该报文复制到 内核空间, 内核空间分析报文后交给对应的程序
  4. nginx分析该报文,将报文和自己的配置文件比对,按照配置文件完成请求,分析后发现客户需要 index.htm
  5. 由于 程序的权限问题,没有资格直接调用磁盘上的文件,
  6. 程序会再将这个请求 再次转发给内核
  7. 内核得到后请求 去磁盘上找文件找到文件后 复制给程序
  8. 程序会构建响应报文构建好后在交给内核空间
  9. 内核空间 得到响应报文后,再交给网卡发给客户

3.I/O模型的相关概念:

 3.1 同步/异步(消息反馈机制):

    关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。

  • 同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成

  • 异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态

3.2 阻塞/非阻塞:

   关注调用者在等待结果返回之前所处的状态

  • 阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。

  • 非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。

三、nginx支持的事件驱动模型:

  1、select:

    select库是在linux和windows平台都基本支持的 事件驱动模型库,并且在接口的定义也基本相同,只是部分参数的含义略有差异,最大并发限制1024,是最早期的事件驱动模型。

  2、poll:

    在Linux 的基本驱动模型,windows不支持此驱动模型,是select的升级版,取消了最大的并发限制,在编译nginx的时候可以使用--with-poll_module和--without-poll_module这两个指定是否编译select
库。

  3、epoll:

   epoll是库是Nginx服务器支持的最高性能的事件驱动库之一,是公认的非常优秀的事件驱动模型

它和select和poll有很大的区别,epoll是poll的升级版,但是与poll有很大的区别.

     epoll的处理方式是创建一个待处理的事件列表,然后把这个列表发给内核,返回的时候在去轮训检查这个表,以判断事件是否发生,epoll支持一个进程打开的最大事件描述符的上限是系统可以打开的文件的最大数,同时epoll库的I/O效率不随描述符数目增加而线性下降,因为它只会对内核上报的“活跃”的描述符进行操作。

四、nginx模块:

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能

  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等

  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持

  • Stream服务模块: 实现反向代理功能,包括TCP协议代理

  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

五、编译安装nginx:

yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel
  #安装依赖包

useradd -M -s /sbin/nologin nginx
  #新建nginx用户便于管理

cd /data

wget http://nginx.org/download/nginx-1.18.0.tar.gz
#官网下载安装包

tar xf nginx-1.18.0.tar.gz   #解压

cd nginx-1.18.0/
./configure --prefix=/apps/nginx \   --prefix=的路径可自定义,注意编写.service时路径要对应
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

make  -j2  && make install   #编译安装

chown -R nginx.nginx /apps/nginx
#修改权限

vim /usr/lib/systemd/system/nginx.service   
#编写service文件,添加到system服务中,便于管理

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target

systemctl daemon-reload 
#重新加载配置
systemctl enable --now nginx
#开机自启并立即启动    如果卡主是应为logs下有 nginx.pid  文件  删除即可

chown -R nginx.nginx /apps/nginx
#修改权限

五、信号使用:

nginx -v    #查看nginx版本

nginx -V    #查看更详细的信息和安装时的配置选项

nginx -t    #检测配置文件

nginx -g    #指定配置 不已配置文件中的为准

nginx -s    #发送信号

nginx -h    #查看帮助

 5.1 查看详细信息:

5.2 发送信号:

   kill -l    可以查看所有信号

kill         SIGQUIT              优雅的关闭:有人在访问不会结束进程
              SIGUSR1             重新分割日志
              SIGUSR2             运行中升级
              SIGWINCH          优雅的关闭worker进程,work进程负责处理请求,还有请求不会关闭

nginx -s 信号

nginx信号:

  stop             SIGTERM        直接停止
  quit              SIGQUIT         优雅的退出:有人在访问不会结束进程
  reopen        SIGUSR1         分割日志
  reload         SIGHUP           重新加载配置文件

  5.2.1 分割日志:


cd /apps/nginx/logs/

mv access.log access.log.bak

touch access.log

nginx -s Reopen #发送信号

5.3平滑升级:

  1.前提准备:

systemctl stop firewalld

setenforce 0

systemctl start nginx

  2.开启两核:

vim /apps/nginx/conf/nginx.conf  

worker_processes  2;          #开启两核

nginx -s reload               #刷新配置文件

 

 3.下载编译新版本:

wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /usr/local/src/

#下载安装包

cd /usr/local/src/

tar xf nginx-1.20.2.tar.gz 

cd nginx-1.20.2/

nginx -V                         #查看老版本编译时选择的配置

./configure  ......              #.....从查看中复制

make                             #编译  注意千万不要make install

  4.移动新版本位置:

cd objs

mv /apps/nginx/sbin/nginx   /apps/nginx/sbin/nginx.bak

cp objs/nginx /apps/nginx/sbin/

cd /apps/nginx/sbin/

nginx -t   #检查语法

 5. 发送平滑升级信号:

kill -USR2 `cat /apps/nginx/logs/nginx.pid`

#也可以直接查看pid号,手输     nginx.pid默认是在logs下

  6.优雅关闭老版本:

kill -WINCH `cat /apps/nginx/nginx.pid.oldbin`

       此时当老用户关闭时,老进程就会关闭

六、配置详解:

  1.全局配置:

    1.1 关闭,修改版本名:

       关闭:

vim /apps/nginx/conf/nginx.conf

server_tokens  off;    #添加到http模块中

nginx -s reload        #刷新配置文件

     修改:

需要重新编译安装

vim  /data/nginx-1.18.0/src/core/nginx.h   #更改安装包配置

#define NGINX_VERSION      "1.18.0"
#define NGINX_VER          "nginx/" NGINX_VERSION  #自定义

49行  static u_char ngx_http_server_string[] = "Server: nginx" CRLF;

#自定义

重新编译安装
./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

make && make install

    1.2 修改启动的进程数:

      通常情况下,worker_processes 可以设置成 CPU 核心数的两倍

vim /apps/nginx/conf/nginx.conf

worker_processes  1;   
#允许的启动工作进程数数量,和你真实的cpu数量有关   1

worker_processes auto;
#如果设置为auto  就是你真实的cpu数量

ps axo pid,cmd,psr,ni|grep nginx
#可以看到 nginx的  worker数量

   

 1.3 cpu与worker进程绑定:

    将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。

worker_cpu_affinity 01 10;

ps axo pid,cmd,psr,ni|grep -v grep |grep nginx|sort -n

##可以查看cpu和进程的绑定

   1.4  nginx优先级(worker):

worker_priority -20;

nginx -s reload   #刷新

 1.5 调试work进程打开的文件的个数:

#nginx.conf文件全局模块添加:

   worker_rlimit_nofile 65536; 

#更改机器单个进程能打开的文件:

   vim /etc/security/limits.conf   

*                soft    core            unlimited
*                hard    core            unlimited
*                soft    nproc           1000000
*                hard    nproc           1000000
*                soft    nofile          1000000
*                hard    nofile          1000000
*                soft    memlock         32000
*                hard    memlock         32000
*                soft    msgqueue        8192000
*                hard    msgqueue        8192000

reboot  #重启生效

#更改完可以使用:

ulimit -a  #显示当前用户的进程资源限制

  1.6 服务的前后台运行:

     容器中会用到,默认是后台

daemon off;

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

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

相关文章

混合App开发,还能用计算机之父的那套理论

随着移动互联网的蓬勃发展,传统的原生应用和Web应用逐渐融合,冯诺伊曼结构则为此提供了坚实的理论基础。通过将应用的核心逻辑和数据存储在云端,实现了应用的分离,不仅为开发者带来了更便捷的维护和更新方式,也为用户提…

亚马逊加购软件之添加购物车对亚马逊卖家有什么好处

亚马逊对卖家而言,购物车功能可以带来以下一些好处: 1、提高销售机会:当买家将商品添加到购物车中,这意味着他们对这些商品感兴趣并考虑购买。这为卖家提供了更多的销售机会,因为购物车中的商品可能会最终被购买。 2…

橙河:海外賺美金的项目有哪些?

大家好,我是橙河老师。现在呢,很多人去国外打工,大家在短视频上也经常能看到,他们在国外挣了几年钱,回来就能买车买房。 其实呢,他们在国外的工作,工资也就是几千块一个月,不过他们…

15-模型 - 一对多 多对多

一对多: 1. 在多的表里定义外键 db.ForeignKey(主键) 2. 增加字段 db.relationship 建立联系 ("关联表类名","反向引用名") from ext import db# 一 class User(db.Model):id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)us…

「MySQL-05」MySQL Workbench的下载和使用

目录 一、MySQL workbench的下载和安装 1. MySQL workbench介绍 2. 到MySQL官网下载mysql workbench 3. 安装workbench 二、创建能远程登录的用户并授权 1. 创建用户oj_client 2. 创建oj数据库 3. 给用户授权 4. 在Linux上登录用户oj_client检查其是否能操作oj数据库 三、使用…

CSPM认证是什么?

​CSPM项目管理专业人员能力等级评价是由中国标准化协会(全国项目管理标准化技术委员会秘书处)和中国国际人才交流基金会联合发起的。 是依据《项目管理专业人员能力评价要求》(GB/T 41831-2022)国家标准,按照项目管理专业人员应具备的职业道…

六、性能测试之CPU分析

性能测试之CPU分析 一、回顾:性能测试分析的思路二、cpu知识1、影响cpu性能的物理因素:架构、主频、核2、结构:主要物理结构是3个,实际是有4个3、内存说人话(总结)4、内核&线程&架构5、查看cpu信息…

爬虫逆向实战(二十五)--某矿采购公告

一、数据接口分析 主页地址:某矿 1、抓包 通过抓包可以发现数据接口是cgxj/by-lx-page 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个param的加密参数 请求头是否加密? 无响应是否加密? 无c…

TypeScript配置-- 1. 新手处理TS文件红色波浪线的几种方式

Typescript 规范化了JS的项目开发,但是对一些项目的一些新手来说,确实是不怎么优好,譬如我:将我之前珍藏的封装JS代码,拿进了配置了tsconfig.json的vue3项目,在vscode下,出现了满屏的红色 &…

css学习7(盒子模型)

1、盒子模型图&#xff1a; Margin(外边距) - 清除边框外的区域&#xff0c;外边距是透明的。Border(边框) - 围绕在内边距和内容外的边框。Padding(内边距) - 清除内容周围的区域&#xff0c;内边距是透明的。Content(内容) - 盒子的内容&#xff0c;显示文本和图像。 <!DO…

接口自动化测试 —— Jmeter 6种定时器应用

①定时器是在每个sampler&#xff08;采样器&#xff09;之前执行的&#xff0c;而不是之后&#xff0c;不管这个定时器的位置放在sampler之后&#xff0c;还是之下&#xff0c;都在sampler之前得到执行 ②定时器是有作用域的&#xff0c;当执行一个sampler之前时&#xff0c;…

机器学习---决策树算法(CLS、ID3、CART)

1. 决策树 决策树&#xff08;Decision Tree&#xff09;又称为判定树&#xff0c;是运用于分类的一种树结构。其中的每个内部结点 &#xff08;internal node&#xff09;代表对某个属性的一次测试&#xff0c;每条边代表一个测试结果&#xff0c;叶结点&#xff08;leaf&am…

Flutter实现StackView

1.让界面之间可以嵌套且执行动画。 2.界面的添加遵循先进后出原则。 3.需要使用AnimateView&#xff0c;请看我上一篇博客。 演示&#xff1a; 代码&#xff1a; Stack: import package:flutter/cupertino.dart;///栈&#xff0c;先进后出 class KqWidgetStack {final Lis…

Excel显示此值与此单元格定义的数据验证限制不匹配怎么办?

总结&#xff1a;1、在编辑excel文档的时候&#xff0c;弹出此时预测单元格定义的数据验证&#xff0c;限制不匹配的提示。2、这是我们点击菜单来的数据菜单。3、然后点击数据工具栏的数据验证下拉按钮。4、在弹出的菜单中选择数据验证的菜单项。5、然后在打开的窗口中点击左下…

【附安装包】Adobe XD2022安装教程

软件下载 软件&#xff1a;Adobe XD版本&#xff1a;2022语言&#xff1a;简体中文大小&#xff1a;346.8M安装环境&#xff1a;Win11/Win10&#xff08;1809版本以上&#xff09;硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff0c;不支持7代以下CPU&#xff09;下载通…

正中优配:新能源股票为何跌跌不休

从前在A股商场炙手可热、涨势如虹的新能源股票&#xff0c;比方光伏、风电、新能源轿车板块的股票&#xff0c;本年以来却是跌跌不休。有些从前的龙头股&#xff0c;看看K线图&#xff0c;走势用“疑是银河落九天”来描述好像也不为过。可是另一方面&#xff0c;这些新能源股票…

头条移动端项目Day06 —— kafka及异步通知文章上下架

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

3d素材库素材资源平台大大节省老师备课时间

教育元宇宙相信大家有所耳闻&#xff0c;3D素材云库通过数字三维建模技术将现实中的物体、天气、灯光等1&#xff1a;1模拟还原到虚拟场景中&#xff0c;让人们在教育元宇宙平台中可视、可见、可感。 在元宇宙爆发的大背景下&#xff0c;3D互联网传播内容也将迎来一次全面升级&…

uniapp启动微信小程序开发者工具报错Enable IDE Service (y/N) 

下载安装好微信小程序开发者路径 配置好启动路径后 报错[微信小程序开发者工具] ? Enable IDE Service (y/N) [27D[27C 解决办法 因为微信开发者工具的服务端口号没有打开

人机对抗智能-部分可观测异步智能体协同(POAC)-(1)

环境链接&#xff1a;数据中心-人机对抗智能 (ia.ac.cn)http://turingai.ia.ac.cn/data_center/show/10 1.环境配置 Ubuntu 20.04 Anaconda python版本3.6 1.1 安装torch0.4.1失败 参考文章&#xff1a; 安装torch0.4.1的神坑_torch0.4.1_DEMO_Tian的博客-CSDN博客 co…