目录
一、web服务器介绍
1.1 Apache prefork 模型
1.2 Apache worker 模型
编辑 1.3 Apache event模型
1.4 Nginx-高性能的web服务端
1.5 服务端 I/O 流程
1.5.1 磁盘 I/O
1.5.2 网络 I/O
二 、nginx 架构及安装
2.1 nginx 进程结构
2.2源码编译安装nginx
2.2.1下载源码包
2.2.2 下载依赖包,并编译。
2.2.3 启动nginx,编译参数
三、nginx 启动脚本编写
四、nginx平滑升级和回滚
4.1 nginx的平滑升级
4.2 版本回滚
五、nginx核心配置详解
5.1 配置文件说明
5.2 全局配置优化
5.2.1 高并发配置双核心
编辑
5.3 nginx配置中的root和alias
5.3.1 local定义目录
编辑5.3.2 alias ----类似与软链接
5.4 location 的详细使用
5.5 账户认证
5.6 自定义错误页面
5.7 自定义日志
5.8 检测文件是否存在
5.9 长连接配置
5.10 作为下载服务器配置
一、web服务器介绍
1.1 Apache prefork 模型
- 预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024
- 每个子进程有一个独立的线程响应用户请求
- 相对比较占用内存,但是比较稳定,可以设置最大和最小进程数
- 是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景
优点:稳定缺点:每个用户请求需要对应开启一个进程 , 占用资源较多,并发性差 , 不适用于高并发场景‘
1.2 Apache worker 模型
- 一种多进程和多线程混合的模型
- 有一个控制进程,启动多个子进程
- 每个子进程里面包含固定的线程
- 使用线程程来处理请求
- 当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,
- 由于其使用了线程处理请求,因此可以承受更高的并发
优点:相比 prefork 占用的内存较少,可以同时处理更多的请求缺点:使用keepalive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超 时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用(该问题在prefork 模式下,同样会发生)
1.3 Apache event模型
Apache 中最新的模式, 2012 年发布的 apache 2.4.X 系列正式支持 event 模型 , 属于事件驱动模型(epoll) 每个进程响应多个请求,在现在版本里的已经是稳定可用的模式它和 worker 模式很像,最大的区别在于,它解决了 keepalive场景下长期被占用的线程的资源浪费问题 (某些线程因为被 keepalive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)event MPM 中,会有一个专门的线程来管理这些 keepalive 类型的线程当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keepalive 类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放缺点:没有线程安全控制
1.4 Nginx-高性能的web服务端
1.5 服务端 I/O 流程
I/O 在计算机中指 Input/Output , IOPS (Input/Output Per Second) 即每秒的输入输出量 ( 或读写次数 ), 是衡量磁盘性能的主要指标之一。 IOPS 是指单位时间内系统能处理的 I/O请求数量,一般以每秒处理的I/O 请求数量为单位, I/O 请求通常为读或写数据操作请求。一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用 户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而 是需要经历一次从内核空间中的内存数据 copy 到用户空间的进程内存当中,所以简单说 I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。服务器的 I/O
- 磁盘I/O
- 网络I/O : 一切皆文件,本质为对socket文件的读写
1.5.1 磁盘 I/O
机械磁盘的寻道时间、旋转延迟和数据传输时间:
寻道时间:是指磁头移动到正确的磁道上所花费的时间,寻道时间越短则I/O处理就越快,目前磁盘的寻道时间一般在3-15毫秒左右。
旋转延迟:是指将磁盘片旋转到数据所在的扇区到磁头下面所花费的时间,旋转延迟取决于磁盘的转速,通常使用磁盘旋转一周所需要时间的1/2之一表示,比如7200转的磁盘平均训传延迟大约为
60*1000/7200/2=4.17毫秒,公式的意思为 (每分钟60秒*1000毫秒每秒/7200转每分/2),如果是
15000转的则为60*1000/15000/2=2毫秒。
数据传输时间:指的是读取到数据后传输数据的时间,主要取决于传输速率,这个值等于数据大小除以传输速率,目前的磁盘接口每秒的传输速度可以达到600MB,因此可以忽略不计。
常见的机械磁盘平均寻道时间值:
7200转/分的磁盘平均物理寻道时间:9毫秒
10000转/分的磁盘平均物理寻道时间:6毫秒
15000转/分的磁盘平均物理寻道时间:4毫秒
常见磁盘的平均延迟时间:
7200转的机械盘平均延迟:60*1000/7200/2 = 4.17ms
10000转的机械盘平均延迟:60*1000/10000/2 = 3ms
15000转的机械盘平均延迟:60*1000/15000/2 = 2ms
每秒最大IOPS的计算方法:
7200转的磁盘IOPS计算方式:1000毫秒/(9毫秒的寻道时间+4.17毫秒的平均旋转延迟时
间)=1000/13.13=75.9 IOPS
10000转的磁盘的IOPS计算方式:1000毫秒/(6毫秒的寻道时间+3毫秒的平均旋转延迟时
间)=1000/9=111IOPS
15000转的磁盘的IOPS计算方式:15000毫秒/(4毫秒的寻道时间+2毫秒的平均旋转延迟时
间)=1000/6=166.6 IOPS
1.5.2 网络 I/O
网络通信就是网络协议栈到用户空间进程的IO就是网络IO .
- 获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3)
- 构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4)
- 返回数据,服务器将已构建好的响应再通过内核空间的网络 I/O 发还给客户端(5-7)
不论磁盘和网络I/O
- 第一步:将数据从文件先加载至内核内存空间(缓冲区),等待数据准备完成,时间较长
- 第二步:将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短
二 、nginx 架构及安装
2.1 nginx 进程结构
web请求处理机制
- 多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求
- 多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程和此客户端进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。
Nginx是多进程组织模型,而且是一个由Master主进程和Worker工作进程组成。
主进程(master process)的功能:
- 对外接口:接收外部的操作(信号)
- 对内转发:根据外部的操作的不同,通过信号管理 Worker
- 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
- 读取Nginx 配置文件并验证其有效性和正确性
- 建立、绑定和关闭socket连接
- 按照配置生成、管理和结束工作进程
- 接受外界指令,比如重启、升级及退出服务器等指令
- 不中断服务,实现平滑升级,重启服务并应用新的配置
- 开启日志文件,获取文件描述符
- 不中断服务,实现平滑升级,升级失败进行回滚处理
- 编译和处理perl脚本
工作进程(worker process)的功能:
- 所有 Worker 进程都是平等的
- 实际处理:网络请求,由 Worker 进程处理
- Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源,
- 增加上下文切换的损耗
- 接受处理客户的请求
- 将请求依次送入各个功能模块进行处理
- I/O调用,获取响应数据
- 与后端服务器通信,接收后端服务器的处理结果
- 缓存数据,访问缓存索引,查询和调用缓存数据
- 发送请求结果,响应客户的请求
- 接收主程序指令,比如重启、升级和退出等
2.2源码编译安装nginx
环境要求:需要一台虚拟机作为nginx服务器(ip为172.25.254.100,主机名为nginx)。后续可能需要两台虚拟机做web服务器来使用,这边我们后面再详细说明。
2.2.1下载源码包
源码上传后直接解压到根目录下。然后我们可以在里面看到一些nginx的配置文件。
2.2.2 下载依赖包,并编译。
然后我们下载其配置的依赖包。并添加用户。[root@Nginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y [root@Nginx nginx-1.24.0]# useradd -s /sbin/nologin -M nginx
然后下载配置模块。
[root@Nginx nginx-1.24.0]# ./configure --prefix=/usr/local/nginx \ --user=nginx \ # 指定nginx运行用户 --group=nginx \ # 指定nginx运行组 --with-http_ssl_module \ # 支持https:// --with-http_v2_module \ # 支持http版本2 --with-http_realip_module \ # 支持ip透传 --with-http_stub_status_module \ # 支持状态页面 --with-http_gzip_static_module \ # 支持压缩 --with-pcre \ # 支持正则 --with-stream \ # 支持tcp反向代理 --with-stream_ssl_module \ # 支持tcp的ssl加密 --with-stream_realip_module # 支持tcp的透传ip
下载完成功会有以下界面。
最后make&&make install下载
2.2.3 启动nginx,编译参数
通过以下命令启动。
[root@nginx-node1 sbin]# ./nginx
访问成功
由于 每次编译ngin的命令太长了就把它放到环境变量里面。
[root@Nginx ~]# vim ~/.bash_profile添加下面的内容然后source编译一下
[root@Nginx ~]# source ~/.bash_profile启动
可以访问---注意要关闭防火墙
查看版本
三、nginx 启动脚本编写
就是将配置写到配置文件中然后我们可以使用systemctl 模块来启动。
编写配置文件
[root@Nginx ~]# vim /lib/systemd/system/nginx.service[Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
重载并启动
[root@Nginx ~]# systemctl daemon-reload[root@Nginx ~]# systemctl start nginx
四、nginx平滑升级和回滚
4.1 nginx的平滑升级
首先我们要下载1.26 的源码包并解压。这边我们需要这两个包。然后解压然后我们直接编译就行,因为上面的依赖包我们已经下载过了。[root@nginx-node1 nginx-1.26.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/echo-nginx-module-0.63 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
然后我们只需要make就行了[root@Nginx nginx-1.26.1]# make
生成的命令在这里面# 把之前的旧版的 nginx 命令备份[root@Nginx ~]# cd /usr/local/nginx/sbin/ [root@Nginx sbin]# cp nginx nginx.24
#把新版本的nginx命令复制过去
[root@Nginx sbin]# \cp -f /root/nginx/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin
# 检测一下有没有问题[root@Nginx sbin]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful#平滑升级[root@Nginx sbin]# kill -USR2 48732 #nginx worker ID #USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的 nginx #此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80 #此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进 程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。
[root@Nginx sbin]# ps aux | grep nginx root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master process /usr/local/nginx/sbin/nginx nobody 48733 0.0 0.2 14200 4868 ? S 14:17 0:00 nginx: worker process root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master process /usr/local/nginx/sbin/nginx nobody 52076 0.0 0.2 14208 4868 ? S 15:41 0:00 nginx: worker process [root@Nginx sbin]# curl -I localhost HTTP/1.1 200 OK Server: nginx/1.24.0 ##依旧是旧版本生生效 Date: Thu, 18 Jul 2024 07:45:58 GMT Content-Type: text/html Content-Length: 615 Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT Connection: keep-alive ETag: "66988ed9-267" Accept-Ranges: bytes
# 回收旧版本[root@Nginx sbin]# kill -WINCH 48732 [root@Nginx sbin]# ps aux | grep nginx root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master process /usr/local/nginx/sbin/nginx root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master process /usr/local/nginx/sbin/nginx
然后已经更新完成了
4.2 版本回滚
激活老的,新的回收kill -HUP激活老的
[root@Nginx sbin]# cp nginx nginx.26
[root@Nginx sbin]# ls
nginx nginx.24 nginx.26
[root@Nginx sbin]# mv nginx.24 nginx
[root@Nginx sbin]# kill -HUP 48732
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52076 0.0 0.2 14208 5124 ? S 15:41 0:00 nginx: worker
process
nobody 52130 0.0 0.2 14200 4868 ? S 16:30 0:00 nginx: worker
process
[root@Nginx sbin]# kill -WINCH 52075
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52130 0.0 0.2 14200 4868 ? S 16:30 0:00 nginx: worker
process
root 52137 0.0 0.1 221664 2176 pts/0 S+ 16:31 0:00 grep --
color=auto nginx
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.24.0 ##版本回滚完成
Date: Thu, 18 Jul 2024 08:31:51 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT
Connection: keep-alive
ETag: "66988ed9-267"
Accept-Ranges: bytes
五、nginx核心配置详解
5.1 配置文件说明
- 主配置文件:nginx.conf
- 子配置文件: include conf.d/*.conf
- fastcgi, uwsgi,scgi 等协议相关的配置文件
- mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮
- 件扩展类型,MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某
- 种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动
- 使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置
event {
...
}
#http/https 协议相关配置段
http {
...
}
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
...
}
#stream 服务器相关配置段
stream {
...
}
#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路
径,日志路径等。
user nginx nginx;
worker_processes 1; #启动工作进程数数量
events { #events #设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多
个网络连接,使用哪种事件驱动模型 #处理请求,每个工作进程可以同时支持的
最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
worker_connections 1024; #设置单个nginx工作进程可以接受的最大并发,作为web服务器
的时候最大并发数为 #worker_connections *
worker_processes,作为反向代理的时候为
#(worker_connections * worker_processes)/2
}
http { #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格
式定义等绝大多数功能和第三方模块都 #可以在这设置,http块可
以包含多个server块,而一个server块中又可以包含多个location块,
#server块可以配置文件引入、MIME-Type定义、日志自定义、是
否启用sendfile、连接超时时间和 #单个链接的请求上限等。
include mime.types;
default_type application/octet-stream;
sendfile on; #作为web服务器的时候打开sendfile加快静态文件传输,指定是
否使用
#sendfile系统调用来传输文件
#sendfile系统调用在两个文件描述符之间直接传递数据(完全在
内核中操作)
#从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率
很高,被称之为零拷贝,
#硬盘 >> kernel buffer (快速拷贝到kernelsocket
buffer) >>协议栈。
keepalive_timeout 65; #长连接超时时间,单位是秒
server { #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多
个location模块
#比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个
server 可以使用一个端口比如都使用 #80端口提供web服务
listen 80; #配置server监听的端口
server_name localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr
内部的配置进程匹配。
location / { #location其实是server的一个指令,为nginx服务器提供比较
多而且灵活的指令
#都是在location中体现的,主要是基于nginx接受到的请求字符
串
#对用户请求的UIL进行匹配,并对特定的指令进行处理
#包括地址重定向、数据缓存和应答控制等功能都是在这部分实现
#另外很多第三方模块的配置也是在location模块中配置。
root html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使
用绝对路径配置。
index index.html index.htm; #默认的页面文件名称
}
error_page 500 502 503 504 /50x.html; #错误页面的文件名称
location = /50x.html { #location处理对应的不同错误码的页面定
义到/50x.html
#这个跟对应其server中定义的目录下。
root html; #定义默认页面所在的目录
}
}
#和邮件相关的配置
#mail {
# ...
# } mail 协议相关配置段
#tcp代理配置,1.9版本以上支持
#stream {
# ...
# } stream 服务器相关配置段
#导入其他路径的配置文件
#include /apps/nginx/conf.d/*.conf
}
5.2 全局配置优化
是在主配置文件中修改
5.2.1 高并发配置双核心
重载有两个worker核心
5.2.2 修改pam限制
查看打开的最大文件数
[root@Nginx ~]# vim /etc/security/limits.conf* - nofile 100000
压力测试:
5.3 nginx配置中的root和alias
root:指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location
然后在主配置添加子配置文件来写。
include "/usr/local/nginx/conf.d/*.conf";
子配置文件目录/usr/local/nginx/conf.d,然后我们可以在这里子配置文件。
示例:
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf
[root@nginx-node1 ~]# cat /usr/local/nginx/conf.d/vhost.conf
server {
listen 80;
server_name www.haha.com;
root /date/web/html;
index index.html;
}
校验刷新 nginx -t
重启 nginx -s reload
然后测试
5.3.1 local定义目录
示例:
注意:这里用到的域名都要写到解析文件中。
[root@nginx-node1 ~]# mkdir -p /data/web/html/test1
[root@nginx-node1 ~]# echo /data/web/html/test1 > /data/web/html/test1/index.html
[root@nginx-node1 ~]# cat /usr/local/nginx/conf.d/vhost.conf
server {
listen 80;
server_name www.haha.com;
root /data/web/html;
index index.html;
location /test1 {
root /data/web/html;
}
}
注意要刷新,之后就可以访问到。
5.3.2 alias ----类似与软链接
定义路径别名,会把访问的路径重新定义到其指定的路径,文档映射的另一种机制;仅能用于
server {
listen 80;
server_name lee.timinglee.org;
location / {
root /webdata/nginx/timinglee.org/lee/html;
}
location /dirtest {
root /mnt;
}
location /alias { #注意about后不要加/
#使用alias的时候uri后面如果加了斜杠,则下面的路径配置
必须加斜杠,否则403
alias /mnt/dirtest; #当访问alias的时候,会显示alias定义的/mnt/dirtest
里面的内容
}
}
#重启Nginx并访问测试
[root@node100 ~]# curl lee.timinglee.org/alias/
dirtest page
注意:location 中使用 root 指令和 alias 指令的意义不同root # 给定的路径对应于 location 中的 /uri 左侧的 /alias # 给定的路径对应于 location 中的 /uri 的完整路径
5.4 location 的详细使用
- 在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;
- ngnix会根据用户请求的URI来检查定义的所有location,按一定的优先级找出一个最佳匹配,
- 而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri
- uri是用户请求的字符串,即域名后面的web文件路径
- 然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。
#语法规则: location [ = | ~ | ~* | ^~ ] uri { ... } = #用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立 即处理请求 ^~ #用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头 #对uri的最左边部分做匹配检查,不区分字符大小写 ~ #用于标准uri前,表示包含正则表达式,并且区分大小写 ~* #用于标准uri前,表示包含正则表达式,并且不区分大写 不带符号 #匹配起始于此uri的所有的uri \ #用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号 #匹配优先级从高到低: =, ^~, ~/~*, 不带符号
5.5 账户认证
先创建用户账号。
写配置文件。
[root@Nginx ~]# mkdir /data/web/lee
[root@Nginx ~]# echo lee > /data/web/lee/index.html
[root@Nginx ~]# cat /usr/local/nginx/conf.d/vhosts.conf
server {
listen 80;
server_name www.haha.com;
location /login {
root /data/web/lee;
index index.html;
auth_basic "login password";
auth_basic_user_file "/usr/local/nginx/.htpasswd";
}
}
测试访问。
访问浏览器
5.6 自定义错误页面
error_page code ... [=[response]] uri;
重载测试访问。访问测试。
5.7 自定义日志
修改子配置文件,主要是下面的标红的地方起作用。
测试:访问存在和不存在的,并查看日志
5.8 检测文件是否存在
修改配置文件添加如下标红内容。
创建删除文件并测试访问。
[root@nginx-node1 ~]# mkdir /data/web/html/error
[root@nginx-node1 ~]# echo error default > /data/web/html/error/default.html
[root@nginx-node1 ~]# curl www.haha.com
www.haha.com
[root@nginx-node1 ~]# rm -rf /data/web/html/index.html
[root@nginx-node1 ~]# nginx -s reload
[root@nginx-node1 ~]# curl www.haha.com
error default
5.9 长连接配置
在主配置文件里面设置--/usr/local/nginx/conf/nginx.conf
keepalive_requests 3;
keepalive_timeout 65 60;
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,第二个数字60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60 #浏览器收到的服务器返回的报文
#如果设置为0表示关闭会话保持功能,将如下显示:
#Connection:close 浏览器收到的服务器返回的报文
#使用命令测试
测试我是通过telnet来测试,如果没有就去下载:
修改,第二个值变为keep alive60
5.10 作为下载服务器配置
#创建目录,并做数据来下载mkdir /data/web/download编写子配置文件。添加如下标红部分。下载:在网页访问