nginx的功能以及运用(编译、平滑升级、提高服务器设置、location alias 等)

nginx与apache的对比

 nginx优点

nginx中INPUT  OUTPUT模型

 

零拷贝技术

原理:减少内核空间和用户空间的拷贝次数,增加INPUT OUTPUT的效率

 

网络I/O 模型 

同步,异步 消息反馈机制

阻塞和非阻塞

 阻塞型I/O模型:不利于处理高并发

 

非阻塞型I/O  虽然可以在等待的时间内,去接待其他的应用程序,但是不会告诉nginx什么时候结束没有反馈机制,需要nginx不停的去访问,反而一直消耗资源。 

 多路复用I/O模型,是nginx使用的模型,多出来select应用进程,nginx不直接与内核交流,而由select程序交流

 select  poll epoll区别

select性能最差,epoll性能最好 在nginx中如果是linux平台则默认为epoll,而windows不支持,所以nginx默认采用哪种连接模型,视情况而定!

nginx工作逻辑

nginx模块

 

 

nginx使用场景

 编译安装nginx过程

第一步 

 第二步 新建nginx用户便于管理

第三步切换到/opt下,下载软件包wget http://nginx.org/download/nginx-1.18.0.tar.gz

第四步解压

 ./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 

 第六步 做软连接,为了让系统识别nginx 能使用起来

第七步 修改权限,因为新建立的nginx用户

这边其实可以直接启动nginx了,但是如果想停止的话,只能杀死nginx这个进程

 第八步,所以要自启动nginx

配置文件的内容

[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
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
 

最后启动nginx即可 systemctl start nginx 

注意因为是新版的安装包,必须安装openssl-devel

表明nginx交给systemctl这个进程来管理,如果停止则 systemctl stop nginx 

解释说明:

做一个软连接 为了让系统识别nginx 

没做软连接之前,系统识别不了nginx

 补充说明:如果正确使用sbin 或bin 

查看第三方程序在哪个里面 pwd可以查看,如果在sbin就用sbin  如果在bin,就用bin

 解析为什么软连接的的路径  make install生成安装目录 才会有nginx

有两种方法可以识别nginx

1.echo $PATH,将nginx的路径加入到此文件中

2.做软连接

指定配置,不以配置文件中的为准

nginx -g

 修改一下 nginx -g 进程数

在改之前,停止nginx运行 然后在配置文件中,将文件中的配置文件工作进程数注释掉,随后再nginx -g 指定配置即可成功

 

查看语法是否有误 

 开启nginx进程 并且查看

master process:是nginx的主进程,用来管理worker process进程,并且可以读取配置文件

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

停止nginx

1.先查看nginx的pid号 pid号在logs目录里面

pid号与主进程号是一样的                                 

 杀除进程号

 killall -3 nginx中killall是根据进程名杀除,但是会出现误杀。

重载 

 或者使用nginx的-s选项 可以通过--help查看

如果要停止nginx,可以使用nginx -s quit  随后使用lsof  -i :80 去检验

如果想使用重载,则使用nginx -s reload

平滑升级:就是在不关闭nginx的情况下,升级nginx

 

 

 

 举例说明,先在官网下载一个最新版本的nginx,1.25

随后,查看自己的nginx版本号,nginx -v            ./nginx -v 可以看见25版本

 将最新版本的nginx挪到xshell中

 

 然后使用./configuer  跟make 即可 不需要使用make install (怕会被覆盖)

 ./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

随后查看一下,会生成objs的文件夹,此文件夹中,就存在25版本的文件

 接下来要做替换,先找到24版本的nginx,改个名字

 改完名字之后,再切换到25版本中的objs(因为里面有25版本的nginx的二进制文件)

 接着,去24版本的路径中去查看 

 接着,继续切换到25版本的路径中

 最后证实一下

或者通过客户端去访问服务端

回滚

 

 日志分割 

kill -USR1 <pid号>  = nginx -s reopen

举例说明,日志分割,每天都要生成新的日志 怎么才能让nginx知道新日志的产生,并且将日志内容写入新的日志里面

打开第二个终端去curl第一个终端,然后再次访问logs 再次查看

 

访问之后,再进入第一个终端里面,可以查看到此时日志是有记录的

 模拟日志分割 将原来的文件改名,然后再建立一个新日志文件

再次利用第二个终端去访问curl一下,然后观察ll logs的日志情况

可以观察到日志文件的内容还是在旧文件里面,并没有在新文件里面产生日志

所以要nginx知道,要把内容加载到新日志文件里面

然后第二终端再curl 在观察ll,此时nginx已经知道并且把内容传到新日志里面

 这边还可以使用kill - USR1 <pid号> ,这边必须要找到主进程pid号

查看更多的信号

 

认识nginx里的主配置文件

 

 

 

修改版本 或者关闭版本

在没关闭版本之前,使用另外一个curl -I 查看头部信息 查看一下

 在nginx主配置文件中修改,并且要在http配置中修改,因为版本跟网页相关 所以在http配置中修改

 

随后在另外一台终端再curl -I  因此看不见版本号了

 自定义版本号

第一步,去修改源码包里面的文件  core为核心代码

 

改完之后为

 第二步 去改头部信息

 

第三步 再从头编译安装nginx

 

 

然后 make  make install

然后重启nginx

 

 最后,在另外一个终端再curl

这边为什么是lucky,因为在主配置文件中 server_tokens 0ff了

 如果想看nihao/9527,则在主配置文件中修改即可 改成on

 随后重载

在另外一个终端curl 

 

 全局配置

在全局配置中的文件数要跟event配置中的进程处理连接数要相同!! 

补充:如果要向提高每个工作进程的连接数,上面文件数跟连接数只是在程序上面设置,系统也要设置。

临时修改 ulimit -n 数字  

缺点:服务器重启之后,就会还原变成默认值1024

永久修改: 进入、etc/security/    (进入重要的配置文件中)

验证:

重启服务器

验证一下,成功

问题展示:

如果想要服务器添加5万并发,该如何设置(服务器有2个cpu) 系统设置(设置最大能打开的文件数)+程序设置

第一步:先查看cpu数量 (有两个,所以五万除以2,所以每个进程的文件数跟连接数改为25000,五万的一半)

第二步 在nginx主配置文件中修改 主进程数、文件数、连接数、use epoll

以上步骤为在程序中设置最大的进程数,同时系统也要设置

第三步 在/etc/security/中配置最大打开的文件数

 

 要重启

第四步保存后退出,并且重启nginx服务

验证一下:

打开第二终端(相同)查看进程号

 

查看max open files 为25000成功 

 

正常的并发数量:文件数*连接数  此时nginx为网站服务器

反向代理=文件数*连接数 /2   此时nginx为代理服务器  

nginx要处理 客户端过来的连接  还有   给客户端服务器发来的连接


 

http配置

 

例如,当在网页中访问自己的主页,

 

这个里面的格式就是因为http中main决定的。

 

 web服务监听设置

访问前缀为ky33时,就是从/var/www/html中去找到abc.html文件

访问前缀为ky35时,就是从/var/www/root中去找到abc.html文件 

 root是路径

解析 :先把ky33当做文件去看,会优先访问这个目录有没有ky33这个文件,如果有直接返回,如果没有,则把ky33当做目录,去目录里面找index.html文件,如果还是没有则出现404报错

 举例说明

在nginx.conf配置文件中修改内容

 在conf配置文件中建立var文件夹,再分别在www web里面建立ky33 ky35的目录,并且写入文件内容

 最后重启一下nginx服务

进入网页中输入网址

成功

alias别名 

举例说明,在ky35中,将root改为alias,然后去访问网页,会显示错误,在nginx.logs里面看一下错误日志

 

 因此,只需要在web文件夹中在建立一个abc.html的文件即可

然后再访问网页,成功

root与alias

nginx访问状态统计设置 (nginx是一个网站,要看当前并发量、处理多少连接、多少人访问)

第一步查看模块是否下载 

nginx -V

模块设置

 

如果想关闭模块前面加without  想开启 加 with

 第二步 开启模块

进入到nginx.conf的配置文件中修改

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第3.3章:StarRocks数据导入——Stream Load

一、概述 Stream Load是StarRocks最为核心的导入方式&#xff0c;用户通过发送HTTP请求将本地文件或数据流导入至StarRocks中&#xff0c;其本身不依赖其他组件。 Stream Load支持csv和json两种数据文件格式&#xff0c;适用于数据文件数量较少且单个文件的大小不超过10GB 的场…

[yolov9]使用python部署yolov9的onnx模型

【框架地址】 https://github.com/WongKinYiu/yolov9 【yolov9简介】 在目标检测领域&#xff0c;YOLOv9 实现了一代更比一代强&#xff0c;利用新架构和方法让传统卷积在参数利用率方面胜过了深度卷积。 继 2023 年 1 月 正式发布一年多以后&#xff0c;YOLOv9 终于来了&a…

基于Java SSM框架实现高校失物招领管理平台系统项目【项目源码】

基于java的SSM框架实现高校失物招领管理平台系统演示 B/S结构 在B/S的结构中&#xff0c;学生可以在任何可以上网的地方访问和使用系统网站的功能&#xff0c;没有地域和时间等方面的限制&#xff0c;B/S结构是把程序完整放置到计算机网络的服务器上&#xff0c;通过计算机互联…

module ‘json‘ has no attribute ‘dumps‘

如果在使用Python的json模块时遇到AttributeError: module json has no attribute dumps错误&#xff0c;通常是因为在Python环境中json模块不支持dumps方法。这种情况可能是因为Python的json模块被重命名或修改过导致的。 解决方法可以尝试以下几种&#xff1a; 1.检查Pytho…

SpringBoot:自定义starter

点击查看&#xff1a;LearnSpringBoot08starter 点击查看&#xff1a;LearnSpringBoot08starterTest 点击查看更多的SpringBoot教程 一、主要流程 1. 先创建空的project 2. 打开空的project 结构 图选中model 点击 3. 创建 model&#xff08;Maven&#xff09;启动器 提…

【C语言】内存操作,内存函数篇---memcpy,memmove,memset和memcmp内存函数的使用和模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为​【C语言】内存操作&#xff0c;内存函数篇---memcpy&#xff0c;memmove&#xff0c;memset和memcmp内存函数的使用和模拟实现【图文详解】&#xff0c;图文讲解四种内存函数&#xff0c;带大家更深刻理解C语言中内存函数的操作&…

Jmeter基础(3) 发起一次请求

目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程&#xff0c;需要几个步骤呢&#xff1f; 1、添加线程组2、添加HTTP请求3、添加监听器&#xff0c;查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…

自定义股票池策略周报告---收益1.8,回撤0.7,提供实盘设置

综合交易模型已经交易了1个月了目前收益10&#xff0c;回测0.8&#xff0c;策略追求稳稳的幸福&#xff0c;细水流长&#xff0c;回测年化20&#xff0c;最大回撤8 链接自定义股票池策略周报告---收益1.8&#xff0c;回撤0.7&#xff0c;提供实盘设置 (qq.com) 实盘稳定运行2…

ctx.drawImage的canvas绘图不清晰解决方案,以及canvas高清导出

ctx.drawImage的canvas绘图不清晰 原因&#xff1a; 查资料是这么说的&#xff1a;canvas 绘图时&#xff0c;会从两个物理像素的中间位置开始绘制并向两边扩散 0.5 个物理像素。当设备像素比为 1 时&#xff0c;一个 1px 的线条实际上占据了两个物理像素&#xff08;每个像素…

Redis篇之Redis持久化的实现

持久化即把数据保存到可以永久保存的存储设备当中&#xff08;磁盘&#xff09;。因为Redis是基于内存存储数据的&#xff0c;一旦redis实例当即数据将会全部丢失&#xff0c;所以需要有某些机制将内存中的数据持久化到磁盘以备发生宕机时能够进行恢复&#xff0c;这一过程就称…

如何将建筑白模叠加到三维地球上?

​ 通过以下方法可以将建筑白模叠加到三维地球上。 方法/步骤 下载三维地图浏览器 http://www.geosaas.com/download/map3dbrowser.exe&#xff0c;安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“建筑白模”菜单&…

Ubuntu20.04开启/禁用ipv6

文章目录 Ubuntu20.04开启/禁用ipv61.ipv62. 开启ipv6step1. 编辑sysctl.confstep2. 编辑网络接口配置文件 3. 禁用ipv6&#xff08;sysctl&#xff09;4. 禁用ipv6&#xff08;grub&#xff09;附&#xff1a;总结linux网络配置 Ubuntu20.04开启/禁用ipv6 1.ipv6 IP 是互联网…

面试经典150题 -- 二叉树 (总结)

总的地址 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 104 . 二叉树的最大深度 104 . 二叉树的最大深度 递归 : 直接用递归访问 &#xff0c; 访问左孩子 和 右孩子 &#xff0c; 如果 存在 &#xff0c; 深度就1 &…

利用R语言进行典型相关分析实战

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

幻兽帕鲁(Palworld 1.4.1)私有服务器搭建(docker版)

文章目录 说明客户端安装服务器部署1Panel安装和配置docker服务初始化设置设置开机自启动设置镜像加速 游戏服务端部署游戏服务端参数可视化配置 Palworld连接服务器问题总结 说明 服务器硬件要求&#xff1a;Linux系统/Window系统&#xff08;x86架构&#xff0c;armbian架构…

Linux设备模型(二) - kset/kobj/ktype APIs

一&#xff0c;kobject_init_and_add 1&#xff0c;kobject_init_and_add实现 /** * kobject_init_and_add() - Initialize a kobject structure and add it to * the kobject hierarchy. * kobj: pointer to the kobject to initialize * ktype: p…

Spring注入

文章目录 3.1 什么是注入3.1.1 为什么需要注入3.1.2 如何进行注入3.1.3 注入好处 3.2 Spring 注入的原理分析&#xff08;简易版&#xff09;3.3 Set 注入详解3.3.1 JDK内置类型3.3.2 自定义类型3.3.2.1 第一种方式3.3.2.2 第二种方式 3.4 构造注入3.4.1 步骤3.4.2 构造方法重载…

RobotGPT:利用ChatGPT的机器人操作学习框架,三星电子研究院与张建伟院士、孙富春教授、方斌教授合作发表RAL论文

1 引言 大型语言模型&#xff08;LLMs&#xff09;在文本生成、翻译和代码合成方面展示了令人印象深刻的能力。最近的工作集中在将LLMs&#xff0c;特别是ChatGPT&#xff0c;整合到机器人技术中&#xff0c;用于任务如零次系统规划。尽管取得了进展&#xff0c;LLMs在机器人技…

第八篇【传奇开心果系列】python的文本和语音相互转换库技术点案例示例:Google Text-to-Speech虚拟现实(VR)沉浸式体验经典案例

传奇开心果博文系列 系列博文目录python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、虚拟导游示例代码四、交互式学习示例代码五、虚拟角色对话示例代码六、辅助用户界面示例代码七、实时语音交互示例代码八、多语言支持示例代…

大模型平民化技术之LORA

1. 引言 在这篇博文中&#xff0c; 我将向大家介绍LoRA技术背后的核心原理以及相应的代码实现。 LoRA 是 Low-Rank Adaptation 或 Low-Rank Adaptors 的首字母缩写词&#xff0c;它提供了一种高效且轻量级的方法&#xff0c;用于微调预先训练好的的大语言模型。这包括 BERT 和…