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

news2024/11/20 22:06:47

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的配置文件中修改

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

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

相关文章

【Python笔记-设计模式】桥接模式

一、说明 桥接模式是一种结构型设计模式&#xff0c; 主要用于将抽象部分与它的实现部分分离&#xff0c; 从而能在开发时分别使用&#xff0c;使系统更加灵活&#xff0c;易于扩展。 (一) 解决问题 所有 组合类的数量将以几何级数增长 抽象和实现分离&#xff1a;桥接模式可…

【洛谷题解】P1008 [NOIP1998 普及组] 三连击

题目链接&#xff1a;[NOIP1998 普及组] 三连击 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;构成比例 题意&#xff1a; 输出样例&#xff1a;192 384 576 219 438 657 273 546 819 327 654 981 分析…

Redis篇之Redis持久化的实现

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

电阻篇 | 二、压敏电阻

电阻篇 | 二、压敏电阻 定义 压敏电阻是一种具有非线性伏安特性得电阻器件&#xff0c;无极性&#xff0c;主要用在电路承受过压时进行电压钳位&#xff0c;吸收多余得电流以保护敏感器件&#xff0c;英文名称 Voltage Dependent Resistor&#xff0c;简称VDR&#xff0c;或者…

Django模板(四)

一、include标签 加载一个模板,并在当前上下文中进行渲染。这是一种在模板中 “包含” 其他模板的方式 简单的理解:在当前模板中引入另外一个模板内容 1.1、使用方法 模板名称可以是变量,也可以是单引号或双引号的硬编码(带引号)的字符串 {% include "foo/bar.ht…

【Java代码审计】XSS漏洞

1. XSS漏洞 XSS&#xff08;Cross Site Scripting&#xff0c;为了和层叠样式表&#xff08;Cascading Style Sheet,CSS&#xff09;有所区分&#xff0c;故称XSS&#xff09;跨站脚本攻击是一种针对网站应用程序的安全漏洞攻击技术。它可以实现用户会话劫持、钓鱼攻击、恶意重…

链表之“无头单向非循环链表”

目录 ​编辑 1.顺序表的问题及思考 2.链表 2.1链表的概念及结构 2.2无头单向非循环链表的实现 1.创建结构体 2.单链表打印 3.动态申请一个节点 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 8.单链表在pos位置之前插入x 9.单链表删除pos位…

第四十天| 343. 整数拆分、96.不同的二叉搜索树

Leetcode 343. 整数拆分 题目链接&#xff1a;343 整数拆分 题干&#xff1a;给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。 思考&#xff1a;动态规划。…

【linux】shell命令 | Linux权限

目录 1. shell命令以及运行原理 2. Linux权限的概念 3. Linux权限管理 3.1 文件访问者的分类 3.2 文件类型和访问权限 3.3 文件权限值的表示方法 3.4 文件访问权限的相关设置方法 4. file指令 5. 目录的权限 6. 粘滞位 7. 关于权限的总结 1. shell命令以及运行原理 …

常用的函数式接口(Supplier、Consumer、Predicate、Function)

目录 一.函数式接口作为方法的参数 二.函数式接口作为方法的返回值 三.常用的函数式接口 3.1生产型Supplier接口 3.2消费型Consumer接口 抽象方法&#xff1a;accept 默认方法&#xff1a;andThen 3.3判断型Predicate接口 抽象方法&#xff1a;test 默认方法&#xf…

MySQL5.7.24解压版安装教程

一、MySQL5.7.24解压版安装步骤 1.在指定目录下解压压缩包。比如在D:\Program Files\mysql下解压 2.在D:\Program Files\mysql\mysql-5.7.24-winx64目录下新建data文件夹&#xff0c;如果此目录下没有my.ini也需要手动创建 3.my.ini 文件配置内容如下 [mysqld] # 设置3306端口…

数据结构2月19日

题目&#xff1a;顺序表作业 代码&#xff1a; 功能区&#xff1a; #include <stdio.h>#include <stdlib.h>#include "./d2191.h"SeqList* create_seqList(){SeqList* list (SeqList*)malloc(sizeof(SeqList));if(NULL list){return NULL;}list->p…

多输入回归预测|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络回归预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 灰狼优化算法&#xff1a; 卷积神经网络-长短期记忆网络&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容…

软件测试实训系统建设方案2024

软件测试实训室解决方案 一 、方案概述 软件测试实训解决方案是一个复杂且至关重要的过程&#xff0c;它确保了软件在开发过程中的各个模块能够正确地集成和交互。通过这一系列的测试步骤&#xff0c;开发团队能够及时发现并修复潜在的问题&#xff0c;从而提高软件的整体质量…

Chrome Captcha自动解决器,如何下载CapSolver

在数字时代&#xff0c;CAPTCHA&#xff08;Completely Automated Public Turing tests to tell Computers and Humans Apart&#xff0c;完全自动区分计算机和人类的公共图灵测试&#xff09;作为一项重要的安全措施&#xff0c;用于保护网站免受自动机器人的攻击。然而&#…

Keepalived介绍、架构和安装

Keepalived介绍、架构和安装 文章目录 Keepalived介绍、架构和安装1.Keepalived&#xff08;高可用性服务&#xff09;1.1 Keepalived介绍1.2 Keepalived 架构1.3 Keepalived 相关文件 2.Keepalived安装2.1 主机初始化2.1.1 设置网卡名和ip地址2.1.2 配置镜像源2.1.3 关闭防火墙…

分享一个UE的SmoothStep小技巧

SmoothStep节点可以制作更平滑的动画&#xff0c;而如果将max参数作为值传入将value和min参数作为约束&#xff0c;则可以做出类似冲击波的渐变效果&#xff1a; 并且通过修改value与min之间的数值差&#xff0c;可以调节渐变。 这个技巧主要就是可以产生硬边。 比如我们可…

Django——ORM增删改查

基本对象 model.objects 创建数据 可以通过django编写的命令行方式快捷创建数据 python manage.py shell 如果对模型层有任何修改都需要重启shell&#xff0c;否则操作容易出错 在shell中我们需要先引入我们的模型&#xff0c;如from bookstore.models import Book 然后通过…

套接字与套接字编程

对于刚刚学习计算机网络&#xff1a;自顶向下的同学们&#xff0c;在观看了中科大的视频---TCP Socket以及UDP Socket会感到些许疑惑&#xff0c;不过没事&#xff0c;在这篇小文章将会为你解开Socket的神秘面纱 什么是Socket&#xff1f;: Socket 是一套用于不同主机之间通信…

2024年面试季,大前端相关开发者不妨了解一下鸿蒙开发岗

搜狐&#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 美团&#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 360 &#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 高德&#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 新浪&#xff1a;我宣布与华为…