• OpenResty无损升级内嵌nginx版本0DAY漏洞


    openresty-1.21.4.1升级内嵌nginx-1.22.0版本

    你们好!读者们,时隔百天我又写了一篇博客,这记录的是,Nginx版本<=1.21.5存在 0Day漏洞,我在周六晚上接到的通知,我只是个java开发,当时接到这个通知我很震惊,一点解决思路也没有,由于线上openresty内嵌nginx版本,openresty官网没有出新的版本,这都是运维工作人员的事情,我一个苦逼开发者接到了这种事情,打电话和别人讨论,有没有遇到过这种情况升级,甚至我问能不能解决这种漏洞,一开始解决思路是使用nginx -V 查看model 去到github找包,使用nginx编译,由于线上环境,这种方式不可取,所以接下来使用openresty的源码包与nginx源码包进行整合重新编译,经过测试发现 nginx-1.23.1新版本编译会出现错误,整合 nginx-1.22.0稳定版本不会报错 ,亲测,本人搭建了6次

    ngx_http_srcache_util.c:564:49: error: request for member ‘nelts’ in
    something not a structure or union

    openresty升级内嵌nginx教程

    注意:下载一定要去官网下载,GitHub出现钓鱼项目,具体请去查询,这里不细说

    第一步下载openresty

    注意:避免文件覆盖等情况,建议原有的openresty修改一下名字 ,例如:mv /usr/local/openresty
    /usr/local/openresty-1,其实也可以不用替换,基本上是无损升级版本,熟悉运维的小伙伴可以自行选择,原有的nginx变为nginx.old版本,不熟悉的小伙伴,建议原有的openresty修改一下名字,毕竟是线上,先在开发环境测试!!!
    停止掉你正在运行的openresty 看自己需求,基本上也是几分钟安装完毕的事情
    /usr/local/openresty/nginx/sbin/nginx -s stop

    链接: openresty-1.21.4.1
    链接: nginx-1.22.0
    可以使用链接下载并上传至服务器,也可以使用wget命令下载到服务器

    wget https://openresty.org/download/openresty-1.21.4.1.tar.gz
    wget http://nginx.org/download/nginx-1.22.0.tar.gz
    
    • 1
    • 2

    解压

    tar -zxvf openresty-1.21.4.1.tar.gz
    tar -zxvf nginx-1.22.0.tar.gz
    
    • 1
    • 2

    在这里插入图片描述
    然后将解压的nginx-1.22.0文件夹移动至 openresty-1.21.4.1/bundle 目录下
    我这里使用的 /usr/local

    mv  /usr/local/nginx-1.22.0   /usr/local/openresty-1.21.4.1/bundle
    
    • 1

    在这里插入图片描述

    将nginx-1.21.4版本删除,因为不能有多余的nginx版本否则编译不会通过(注意:rm -rf 这个命令慎用) 也可以在windows环境下删除完成之后在上传服务器

    rm -rf  nginx-1.21.4
    
    • 1

    修改源码文件 nginx-no_pool.patch ,由于很多地方需要替换,我为了方便下载至本地 直接将nginx-1.21.4 全部替换为 nginx-1.22.0版本然后保存,上传至原文件目录位置
    在这里插入图片描述
    在这里插入图片描述
    接下来进入到openresty-1.21.4.1目录
    执行命令 由于openresty 编译脚本默认添加了如下model所以我们无需额外添加,如果有需要的小伙伴们,自己添加公司所用的model

    --add-module=../ngx_devel_kit-0.3.1 \
    --add-module=../echo-nginx-module-0.62 \
    --add-module=../xss-nginx-module-0.06 \
    --add-module=../ngx_coolkit-0.2 \
    --add-module=../set-misc-nginx-module-0.33 \
    --add-module=../form-input-nginx-module-0.12 \
    --add-module=../encrypted-session-nginx-module-0.09 \
    --add-module=../srcache-nginx-module-0.32 \
    --add-module=../ngx_lua-0.10.21 \
    --add-module=../ngx_lua_upstream-0.07 \
    --add-module=../headers-more-nginx-module-0.33 \
    --add-module=../array-var-nginx-module-0.05 \
    --add-module=../memc-nginx-module-0.19 \
    --add-module=../redis2-nginx-module-0.15 \
    --add-module=../redis-nginx-module-0.3.9 \
    --add-module=../rds-json-nginx-module-0.15 \
    --add-module=../rds-csv-nginx-module-0.09 \
    --add-module=../ngx_stream_lua-0.0.11 \
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    执行命令 ,这里提示一下:由于很多小伙伴都是yum 命令安装的openresty,我这个配置是根据openresty的yum安装命令的编译,如果你们线上使用的 可以去原有的openresty下的nginx的sbin执行
    nginx -V来查看自己公司的配置,如果没有配置过,使用默认的执行如下即可

    ./configure --prefix=/usr/local/openresty \
    --with-pcre-jit --with-stream --with-stream_ssl_module \
    --with-stream_ssl_preread_module --with-http_v2_module --without-mail_pop3_module --without-mail_imap_module \
    --without-mail_smtp_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module \
    --with-http_auth_request_module --with-http_secure_link_module --with-http_random_index_module \
    --with-http_gzip_static_module --with-http_sub_module --with-http_dav_module --with-http_flv_module \
    --with-http_mp4_module --with-http_gunzip_module --with-threads --with-compat --with-stream --with-http_ssl_module \
    --with-file-aio --with-luajit  \
    --with-pcre 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    如果出现 MakeFile恭喜
    在这里插入图片描述
    执行gmake命令进行编译 这个过程时间有点长 耐心等待即可

    gmake
    
    • 1

    在这里插入图片描述
    这里显示编译成功
    在这里插入图片描述
    下一步执行安装 gmake install

    gmake install
    
    • 1

    在这里插入图片描述
    注意这个命令可以省略,我没有省略,看需自己定即可

    ln -s /usr/local/openresty-1.21.4.1/ /usr/local/openresty

    恭喜安装成功 请去/usr/local/ 目录下查看openresty
    在这里插入图片描述

    /usr/local/openresty/nginx/sbin/nginx -V
    
    • 1

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/4b71fbf9faca457883abe94929402af4.png

    升级成功,启动你的openresty即可,小伙伴们加油,帮我点点关注,点个赞也行 ,查看你的nginx.conf,如果没有变动则直接启动即可,如果你选择了无损升级,查看nginx.conf,如果修改了openresty文件名 则是新的openresty,上传你的nginx.conf在启动,并且根据你们公司的环境进行进行安装你们的环境,我这里用了lua内嵌了一些东西,这基本上就是新的openresty了

    /usr/local/openresty/nginx/conf/nginx.conf
    
    • 1

    启动

    /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
    
    • 1
  • 相关阅读:
    接口设计的那些事
    [激光器原理与应用-9]: 开关电源主要指标
    Spring Boot最核心的25个注解
    深入了解 Axios 的 put 请求:使用技巧与最佳实践
    【C#-1】C#调用matlab生成的dll库
    C++【STL】【STL容器的使用与实现】
    Docker 网络虚拟化基础之网络 namespace
    内存管理_memblock
    uni-app 使用 webview运行到小程序,打开萤石云视频
    【剑指Offer】14.剪绳子
  • 原文地址:https://blog.csdn.net/qq_42731358/article/details/126096807