1. 升级目的

让现有服务平滑过渡到高版本,减少服务漏洞,提高服务性能

让其支持nginx最新特性 nginx threads模块

2. 获取nginx1.7.2版本

wget http://nginx.org/download/nginx-1.17.2.tar.gz
[root@leilei tools]# wget http://nginx.org/download/nginx-1.17.2.tar.gz
[root@leilei tools]# tar -xf nginx-1.17.2.tar.gz
[root@leilei tools]# cd nginx-1.17.2/

3. 编译新版本

获取老版本参数:
[root@leilei nginx-1.17.2]# nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/application/nginx-1.16 --user=www --group=www --with-http_image_filter_module --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module

4.备份老版本nginx二进制文件

[root@leilei nginx-1.17.2]# cp -af /application/nginx/sbin/nginx  ~

5. 编译新版本

./configure --prefix=/application/nginx-1.16 --user=www --group=www --with-http_image_filter_module --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-threads
make
make结束就够了 千万不要 make install
千万不要 make install
千万不要 make install 看到:
objs/src/http/modules/ngx_http_upstream_least_conn_module.o \
objs/src/http/modules/ngx_http_upstream_random_module.o \
objs/src/http/modules/ngx_http_upstream_keepalive_module.o \
objs/src/http/modules/ngx_http_upstream_zone_module.o \
objs/src/http/modules/ngx_http_stub_status_module.o \
objs/ngx_modules.o \
-ldl -lpthread -lpthread -lcrypt -lpcre -lssl -lcrypto -ldl -lpthread -lz -lgd \
-Wl,-E
sed -e "s|%%PREFIX%%|/application/nginx-1.16|" \
-e "s|%%PID_PATH%%|/application/nginx-1.16/logs/nginx.pid|" \
-e "s|%%CONF_PATH%%|/application/nginx-1.16/conf/nginx.conf|" \
-e "s|%%ERROR_LOG_PATH%%|/application/nginx-1.16/logs/error.log|" \
< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory `/server/tools/nginx-1.17.2'

到这里编译完成

--with-threads

新增加的编译项,用于开启对线程池的支持

6. 拷贝新版本nginx二进制文件到老版本中

[root@leilei nginx-1.17.2]# cp -af objs/nginx /application/nginx-1.16/sbin/nginx
cp: overwrite ‘/application/nginx-1.16/sbin/nginx’? y

7. 发送信号启动新版本的worker进程与老版本进程共同工作

kill -USR2 `cat /application/nginx-1.16/logs/nginx.pid`

8.检查进程是否启动

[root@leilei ~]# ps -ef |grep nginx
root 53404 1 0 15:05 ? 00:00:00 nginx: master process /application/nginx-1.16/sbin/nginx
www 53405 53404 0 15:05 ? 00:00:00 nginx: worker process
root 53411 53404 0 15:06 ? 00:00:00 nginx: master process /application/nginx-1.16/sbin/nginx
root 53441 23417 0 15:14 pts/0 00:00:00 vim nginx.conf
root 53617 53494 0 16:35 pts/2 00:00:00 grep --color=auto nginx 已经启动了两个master进程

9. 检查网站是否正常打开,如果打开则发送信号给老的进程要求优雅关闭

打开正常:

10. 发送信号给主进程,要求关闭

[root@leilei ~]# kill -QUIT `cat /application/nginx-1.16/logs/nginx.pid`

11.检查 nginx 进程情况

[root@leilei ~]# ps -ef |grep nginx
root 53404 1 0 15:05 ? 00:00:00 nginx: master process /application/nginx-1.16/sbin/nginx
www 53405 53404 0 15:05 ? 00:00:00 nginx: worker process
root 53441 23417 0 15:14 pts/0 00:00:00 vim nginx.conf
root 53621 53494 0 16:39 pts/2 00:00:00 grep --color=auto nginx 此时老进程已经优雅关闭,只保留了新的进程

12.检查版本

[root@leilei ~]# nginx -v
nginx version: nginx/1.17.2

13.测试新版本特性 增加 aio threads 参数

老版本配置该参数会报错.新版本不会报错,

vim /application/nginx/conf/nginx.conf

在server location 区块添加以下参数
#aio 优化
aio threads;
#aio 优化

配置如下:

1.http块下定义:
thread_pool leilei threads=32 max_queue=65536; 2.server区块下调用:
aio threads=leilei;

再次访问:

14.什么场合适合send file 什么场合适合 aio

启用aio时会自动启用directio,小于directio定义的大小的文件则采用sendfile进行发送,超过或等于directio定义的大小的文件,将采用aio线程池进行发送,也就是说aio和directio适合大文件下载。因为大文件不适合进入操作系统的buffers/cache,这样会浪费内存,而且Linux AIO(异步磁盘IO)也要求使用directio的形式。

sendfile_max_chunk可以减少阻塞调用sendfile()所花费的最长时间。因为Nginx不会尝试一次将整个文件发送出去,而是每次发送大小为256KB的块数据。

注意,Nginx从1.7.11开始为AIO引入了线程池支持,能够使用多线程读取和发送文件,以免工人进程被阻塞。要启用多线程支持,configure时需要显式加入–with-threads选项。

sendfile配置:
http{
sendfile on;
}

更多详情,请关注nginx官方网站nginx.org

可参考: nginx aio

nginx aio模块添加与配置的更多相关文章

  1. Nginx(一)--nginx的初步认识及配置

    什么是Nginx 是一个高性能的反向代理服务器正向代理代理的是客户端反向代理代理的是服务端 Apache.Tomcat.Nginx 静态web服务器jsp/servlet服务器 tomcat 安装Ng ...

  2. nginx缓存模块配置总结proxy_cache(未完)

    简介:此缓存设置用到了第三方模块purge,使用的时候就在源链接和访问的具体内容之间加入关键字"/purge/"即可. 如:访问http://192.168.0.1/a.png 会 ...

  3. nginx 番外----添加第三方模块

    #第三方模块需要先进行下载,然后再编译时指定文件目录 1.查看当前编译模块 root@nginx sbin]# ./nginx -V #查看当前添加模块 nginx version: nginx/ b ...

  4. 安装成功的nginx,如何添加未编译安装模块(非覆盖安装http_image_filter_module)

    背景:1.做了图片上传小项目.2.图片上传,需要多图管理.3.图片上传,需要存储到Fastdfs.4.Fastdfs上的图片,和Nginx结合.5.Nginx从Fastdfs获得的图片,需要使用缩略图 ...

  5. nginx内置高可用配置与第三方高可用模块nginx_ustream_check_mudule配置

    1. nginx 第三方高可用模块 IP 备注 10.0.0.63 proxy 10.0.0.64 web1 10.0.0.65 web2 这里会讲解一些nignx常用高可用方案,以及引入第三方高可用 ...

  6. yum安装下的nginx,如何添加模块,和添加第三方模块

    需求:生产有个接口是通过socket通信.nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信. 实现方法:Centos7.2下yum直接安装的nginx, ...

  7. nginx负载均衡fair模块安装和配置

    nginx-upstream-fair-master fair模块源码 官方github下载地址:https://github.com/gnosek/nginx-upstream-fair说明:如果从 ...

  8. 在已编译安装nginx上动态添加模块

    一.添加nginx模块 找到安装nginx的源码根目录,如果没有的话下载新的源码 wget http://nginx.org/download/nginx-1.8.1.tar.gz 查看ngixn版本 ...

  9. 不重装nginx实现动态添加模块

    如果项目在提供服务的过程中,因为需求使然,需要对nginx进行模块的动态添加,可以按照如下流程进行操作 一.查看nginx当前已经安装了那些模块 1) 进入nginx执行文件目录 cd   /usr/ ...

  10. Nginx中location模块的详细配置(含示例)

    题记 此前在配置Nginx location模块的时候玩出了一些bug,折腾了一段时间.后来网上也查阅了相关的资料,看着也比较混乱.周末有空想着好好整理一下location模块的配置,结合自己的亲手实 ...

随机推荐

  1. ORA-02303: cannot drop or replace a type with type or table dependents,即无法使用类型或表的相关性来删除或取代一个类型

    ORA-02303: cannot drop or replace a type with type or table dependents,即无法使用类型或表的相关性来删除或取代一个类型 在修改一个 ...

  2. 力扣405(java)-数字转换为十六进制(简单)

    题目: 给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字母(a-f)都必须是小写.十六进制字符串中不能包含多余的前导零.如果要转 ...

  3. 我,PolarDB云原生数据库,5年来实现这些重磅技术创新

    简介: 过去5年,阿里云针对PolarDB进行了诸多创新,通过采用存储计算分离.软硬一体化设计,PolarDB实现成本仅为传统商业数据库的十分之一.所实现的计算.内存与存储资源的"三层解耦& ...

  4. 全方位事件监控管理,阿里云日志服务Kubernetes事件中心正式上线

    2020年2月21日,阿里云日志服务Kubernetes事件中心正式上线,为Kubernetes事件提供集中化采集.存储.分析.可视化.告警等能力,帮助Kubernetes使用者快速构建准实时.高可靠 ...

  5. SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台

    简介: SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台 1.目标定位 1.1背景 告警管控平台种类繁多 告警出现后未及时发现处理最终导致故障产生 专有云监控能力拉起依赖版本升级,操作复 ...

  6. 阿里云RDS深度定制-XA Crash Safe

    ​简介: 近几年,随着分布式数据库系统的兴起,特别是基于MySQL分布式数据库系统,会用到XA来保证全局事务的一致性.众所周知,MySQL对XA事务的支持是比较弱的,存在很多问题.为了满足分布式数据库 ...

  7. 修复 WPF 安装 WindowsAppSDK 库构建失败 NETSDK1082 和 NETSDK1112 找不到 win10-arm 失败

    通过在 WPF 项目上安装 WindowsAppSDK 库,可以让 WPF 使用上 Win10 及以上版本提供的 Windows Runtime 强大的 API 集和使用上更多的黑科技.本文记录在安装 ...

  8. 火山引擎VeDI:如何高效使用A/B实验,优化APP推荐系统

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在移动互联网飞速发展的时代,用户规模和网络信息量呈现出爆炸式增长,信息过载加大了用户选择的难度,这样的背景下,推荐 ...

  9. Mybatis学习二(字段名与实体类属性名不相同/关联查询)

    1.在写项目的时候会遇到数据库字段名与实体类属性名不同的情况,可能是为了方便也可能是其他要求,whatever,我们现在来解决这个问题 准备一个数据库表如下 1 CREATE TABLE orders ...

  10. Oracle【ORA-00600 internal error code arguments [2662]】恢复一例

    背景 1.数据库版本:11.2.0.4 2.未开启归档 3.没有备份:无RMAN备份.无DUMP备份 4.数据库redo log全部删除. 解决思路: Oracle 的隐含参数: _allow_res ...