AIO、第三方模块及自定义变量(一)|学习笔记

简介: 快速学习 AIO、第三方模块及自定义变量

开发者学堂课程【Nginx 企业级 Web 服务实战:AIO、第三方模块及自定义变量】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/649/detail/10759


AIO、第三方模块及自定义变量(一)

内容介绍:

一、前言

二、AIO

三、Nginx 高级配置

四、内置变量


一、前言

上节讲到作为上传服务器怎么去配置,通常会有路径 upload

/upload {

proxy_pass.http://1.2.3.4;

}

还有别的参数,比如在这里限制某些方法,限制不允许上传

limit_except GET {

allow 172.18.200.101;

deny all;

}

主要是下载界面可以限制上传


二、AIO

Aio 是在 epoll 模式上做了一些优化及性能提升,平时 epoll 已经满足大多数场合,如果要再调优,开启 aio

aio on | off  #是否启用 asynchronous file I/O(AIO) 功能,需要编译开启

linux 2.6 以上内核提供以下几个系统调用来支持 aio:

1、SYS_io_setup:建立 aio 的 context  调用 setup 来建立 aio 上下文)

2、SYS_io_submit:提交 I/O 操作请求

3、SYS_io_getevents:获取已完成的 I/O 事件

4、SYS_io_cancel:取消 I/O 操作请求

5、SYS_io_destroy:毁销 aio 的 context

使用方法:

一般 Epoll+sendfile 满足大多数场景

但如果场景特殊需要做一些调优,使用 aio 则加上 directio,Aio+directio

Aio 是开启 epoll io 的,是让 Nginx 支持 epoll io,然后 Nginx 在读取下面的文件时,就会通过 epoll 的方式和内核建立多个连接,维持一个连接表,再由 Nginx 线程通过内核调用系统中的文件,大文件一般这样调,对于小文件使用 senfile。一般文件大小超过兆,就会使用 aio

directio size / off;  #directio 是直接读写文件到磁盘,启用直接 I/O,默认为关闭,当文件大于等于给定大小时,例如 directio 4m,可以和 sendfile 结合使用,比如当大于此值使用 AIO,当小于此值使用 sendfile。需要编译启用 asynchronous file I/O(AIO )功能。

如果不开启,在 Nginx 源码中输入

./configure  --help | grep aio

结果显示--with-file-aio     enable file AIO support

需要开启 AIO 的支持,如果不开启直接配置不能运行。

再输入

ps -ef | grep nginx

结果显示 worker process is shutting down

image.png

Nginx 中有多个线程,其中有一个还在处理未能关闭

再来输入

ps -ef |grep nginx

ps -ef |grep nginx

结果还在处理,后台还存在一个

ubuntu-18.04.3-desktop-amd64(1).iso 下载

再来试着将 aio 打开,输入

./configure --help | grep aio^C

再来编辑以下 apps 下的 nginx,输入

vim /apps/nginx/conf/conf.d/linux39-pc.conf

aio 能放置的位置有 http,server,location

现在对该 server 启用 aio,在 location 上输入 aio on;再来增加一个 directio 4m;设置一个数值

保存之后再来检查配置,输入 /apps/nginx/sbin/nginx -t

结果显示报错

nginx: [emerg] "aio on" is unsupported on this platform in /apps/nginx/conf/conf. d/linux39-pc.conf:8

nginx: configuration file /apps/nginx/conf/nginx.conf test failed

不支持,需要在编译时增加一个参数,先来注释 aio on directio 4m

#aio on

#directio 4m

注释完后先关闭,输入

/apps/nginx/sbin/nginx -t

/apps/nginx/sbin/nginx -s stop

关闭之后下载就被强制断开,停止之后再来编译,输入

ngettext /^C

/apps/nginx/sbin/nginx -V

.configure --prefix=/apps/nginx --with-http_ssl_module --wth-http_v2_module--with-http_realip_module --with-http_addition_module --with-http_image_filter_module --with-http_geoip_module --with-http_gunzip_module--with-http_stub_status_ module--with-http_gzip_static_module--with-pcre --with-stream--with-stream_ssl_module --with-stream_realip_module--with-select_module  --with-file-aio

加入 --with-file-aio 该参数后再重新编译,再输入 make

make install

再来检查输入 make^C

把刚才参数打开,

输入vim/apps/nginx/conf/conf.d/linux39-pc.conf,取消掉刚才 aio on 和directio 4m 的注释

再输入 /apps/nginx/sbin/nginx -t

/apps/nginx/sbin/nginx

现在访问没有问题

image.png

但是此时下载断掉,如果现在重启,shutting down 将会强制关闭

输入 ps -ef | grep nginx

刚才 shutting down 的进程强制关闭,显示为如图

image.png

open_file_cache off;  #是否缓存打开过的文件信息,可以理解为是否缓存用户访问过的信息,通过缓存来提升 nginx 的响应时间

但是打开后有一些连带的设置,缓存哪些信息,比如

open_file_cache max=N  [inactive=time];

缓存多长的有效时间,当超过时长后将不再缓存

缓存时间不能太长,否则会发生文件内容已经发生变化,但是缓存内容还未更新

nginx 可以缓存以下三种信息:

(1)文件元数据:文件的描述符、文件大小和最近一次的修改时间

(2)打开的目录结构(如图片之前放置在哪个路径下)

(3)没有找到的或者没有权限访问的文件的相关信息

max=N :可缓存的缓存项上限数量;达到上限后会使用 LRU(Least recently used,最近最少使用)算法实现管理

inactive=time: 缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于 open_file_cache_min_uses 指令所指定的次数的缓存项即为非活动项,将被删除

open_file_cache_errors on | off;

是否缓存查找时发生错误的文件一类的信息

默认值为off

Example:

open_file_cache   max=1000 inactive=20s ;

open_file_cache_yalid   30s ;

open_file_cache_min _uses   2;

open_file_cache_errors   on ;

open_file_cache_min_uses number;

open_file_cache 指令的 inactive 参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项

默认值为1

open_file_cache_valid time;

缓存项有效性的检查验证频率,默认值为60s

open_file_cache max=10000 inactive=60s;  #最大缓存10000个文件,非活动数据超时时长60s

open_file_cache_valid  60s; #每间隔60s检查一下缓存数据有效性

open_file_cache_min_uses 5; #60秒内至少被命中访问5次才被标记为活动数据

open_file_cache_errors on; #缓存错误信息

演示:

输入

vim /apps/nginx/conf/conf.d/linux39-pc.conf

想要参数对全局生效,放到 http 字段中,输入

vim /apps/nginx/conf/nginx.conf

在 server 上输入

open_file_cache max=10000 inactive=60s;  

open_file_cache_valid  60s;

open_file_cache_min_uses 5;  

open_file_cache_errors on;

再重新 reload,输入

ps -ef | grep nginx^C

/apps/nginx/sbin/nginx -s reload

/apps/nginx/sbin/nginx -t

server_tokens off; #隐藏 Nginx server 版本。如图隐藏此处版本1.16

image.png

输入 vim /apps/nginx/conf/nginx.conf

再在 server 上增加 server_tokens off; 隐藏掉版本

再来输入 /apps/nginx/sbin/nginx -s reload

刷新显示如图

image.png

网站上的版本都会修改,一般修改为和品牌或者公司相关的版本,例如小米官网上

image.png

相关文章
|
机器学习/深度学习 PyTorch API
|
监控 负载均衡 网络协议
高并发下Nginx长连接(二)
【4月更文挑战第16天】高并发下Nginx整合方案(二)
432 1
|
应用服务中间件 nginx Python
nginx-upload-module模块实现文件断点续传_nginx upload module 断点续传 进度(1)
nginx-upload-module模块实现文件断点续传_nginx upload module 断点续传 进度(1)
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的英语学习交流平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的英语学习交流平台的详细设计和实现(源码+lw+部署文档+讲解等)
126 0
|
算法 数据安全/隐私保护 Docker
Docker | 教你搭建属于自己的镜像仓库
Docker | 教你搭建属于自己的镜像仓库
4035 1
|
监控 安全 API
如何防止短信盗刷产生资损
日常使用的云资源中,如果由于客户API对外设计不合理、AK/SK暴露等原因,可能导致资源出现被盗刷的情况并导致资损,本文梳理针对短信服务的防盗刷的能力,以及配套的安全管理策略。短信计费模式:可参考https://help.aliyun.com/document_detail/44340.htmlht...
359 0
如何防止短信盗刷产生资损
|
缓存 网络协议 Java
TCP的Window Size和Scale参数对传输效率的影响
目前大多数互联网数据通信都是通过TCP协议进行的,了解其通信方式对提高通信效率,排查通信效率问题有很重要的意义。一. TCP的滑动窗口机制1. 概述TCP协议是可靠的通信协议,数据发送方发送给数据接收方的每一个包必须需要数据接收方返回对应的ACK,否则数据发送方就需要重传这个包。这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。如果你说完一句话,我在处理其他事情,没有
8061 0
|
Kubernetes Linux 网络安全
k8s1.18高可用集群安装-超详细中文官方文档
k8s1.18高可用集群安装-超详细中文官方文档
|
前端开发 JavaScript 安全
SpringBoot+Vue豆宝社区前后端分离项目手把手实战系列教程05---每日一句功能实现
SpringBoot+Vue豆宝社区前后端分离项目手把手实战系列教程05---每日一句功能实现
255 0