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

本文详细比较了Nginx与Apache在I/O模型、工作逻辑、多路复用技术以及安装配置方面的差异,重点讲解了Nginx的工作流程、模块使用场景和配置实例,包括编译安装、自启动服务、性能优化等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 

 

 cpu与work进程绑定(cpu的亲缘性)

 进程运行时,会改变cpu的地点,比如一开始运行在第一块cpu上,下面运行会在第二块进程上,来回切换会有进程消耗,想把进程固定绑在一个cpu上面

 

实际配置在主配置文件中添加

worker_cpu_affinity 00000001 00000010 00000100 00001000

 

 然后再次观察一下主进程  所以绑定起来  

pid路径 

在nginx主配置文件中修改即可

nginx进程的优先级   优先级区间为-20 ~ 19 (有个0)

在ps elf中可以查看 这两个相加取小的值,为优先 nginx如果是web网页,优先级应该高 

 nginx优先级默认为0

如果让nginx的进程高点,可以提高效率

在主配置文件中修改 加上worker_priority (数字)即可

 

 

服务器是否后台还是前台运行

一般来说,服务器都是后台运行,服务器一旦运行,则一直运行,除非人为停止

如果想修改,则在配置文件中修改

 

 daemon on:表示后台运行

daemon off:表示前台运行

只有master模式没有worker模式

 

 

 全局配置

在全局配置中的文件数要跟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服务

进入网页中输入网址

成功

 

server块构建虚拟主机 实际只有1台, 好像有多台主机(建立独立的配置文件 构建不同虚拟主机 PC端和手机端 )   基于域名

 

 

一般是在自配置文件配置,因为构建的是网端,所以在httpd里面修改

在主配置文件里面的子配置http里面设置include,inclide 为加载的意思,配置include,是为了只要在 以.conf结尾的文件会读取http网页

 

 第二步,去nginx建立文件夹

 

 切换到conf.d的文件夹中去,然后去修改文件里面的配置内容

 去建立一个/opt/html的路径

 将一写内容传给/opt/html/index.html网页文件

 第三步再重新建立一个m.conf的文档

第四步打开另外一台主机,修改一下host,让域名得到解析

第五步 再去curl  成功

 

 利用端口号  IP地址同样的步骤只需要在listen 分别加入 端口号或者ip地址即可

 

location 

追踪你的URL,可以根据客户访问的不同URL  访问不同的目录,可以写多个location

 location的局部设置优先级高于全局配置的root路径   例如:这边会访问/data

 

 

 再去第二终端去curl,证实location优先级高

 

如果要访问不同的url 可以设置多个location

 

如果m.conf与pc.conf设置的内容一样,那么先访问那个配置

 根据abcd...前面的字母排序,m在p前面 则先访问m.conf

 

 location的语法规则

 

 =的优先级最高

案例:

 

 ~* 用来对用户请求的uri做模糊匹配,uri中无论都是大写、都是小写或者大小写混合,此模式也都会匹配,通常使用此模式匹配用户request中的静态资源并继续做下一步操作,此方式使用较多注意: 此方式中,对于Linux文件系统上的文件仍然是区分大小写的,如果磁盘文件不存在,仍会提示404 ~* 虽然 不区分大小写 但是系统的文件系统区分大小写

 

 

 进入static1中,拖一个图片进入

图片拖进来之后,要改一改名字,static2 static3都是以上操作,(托照片+改名字)

 

 static2  static3 分别拖两张图片

 

 

 

 

先匹配static1  然后匹配static3 再匹配static2 

 

 

access 模块  四层控制

 

deny:表示拒绝访问

allow:表示同意访问 

 

 

 本机访问:

其他机器访问(在另一个终端访问)

 

alias别名 

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

 

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

然后再访问网页,成功

root与alias

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

第一步查看模块是否下载 

nginx -V

模块设置

 

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

 第二步 开启模块

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值