zoukankan      html  css  js  c++  java
  • nginx平滑升级及隐藏服务器banner信息

    nginx平滑升级及隐藏服务器banner信息

      今天大年初一,还是兢兢业业写篇博客 ~~~

      本文主要讲的是:

      【i】nginx从1.13.3平滑升级到1.16.0。(为啥要升级呀,因为被爆出旧版本nginx漏洞)

        【ii】nginx1.18.0版本隐藏服务器banner信息(也是因为被爆出旧版本nginx漏洞,才升级1.18.0,然后这个隐藏banner信息是xx项目等保低风险项查出来的,上级领导要求搞)

      最近写的频繁,有人说我要保质保量(3月前写够400篇),所以我就尽量丰富呗,不然一篇拆两篇,你懂滴,哈哈哈哈。。。。

     

    一、nginx从1.13.3平滑升级到1.16.0

    1、查看当前nginx版本,及相关编译参数

    /home/ljy/app/nginx/sbin/nginx -V
    nginx version: nginx
    /1.13.3 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --user=ljy --group=ljy --prefix=/home/ljy/app/nginx --with-stream --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-pcre

    2、下载nginx-1.16.0二进制包并解压

    cd /usr/local/src
    wget http://nginx.org/download/nginx-1.16.0.tar.gz
    tar -xvf nginx-1.16.0.tar.gz

    3、备份旧nginx重要文件

    (1)备份旧nginx启动管理终端命令

    cp /home/ljy/app/nginx/sbin/nginx /tmp/

    (2)备份旧nginx配置文件

    前提:先把整个conf目录压缩成 conf_0620.tar.gz

    cp /home/ljy/app/nginx/conf_0620.tar.gz /tmp/

    4、编译nginx-1.16.0

    跟第1条查看nginx-1.13.3的编译参数一样的

    cd /usr/local/src/nginx-1.16.0
    ./configure --user=ljy --group=ljy --prefix=/home/ljy/app/nginx --with-stream --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-pcre

    make #对源代码进行编译,注意下面不要运行:make install !!!

     可以看到  /home/ljy/app/nginx/   安装了新版本nginx-1.16.0相关目录和文件

    5、备份原来二进制nginx,并替换为新的

    (再备份一次,以防万一,当然不做也行)

    mv /home/ljy/app/nginx/sbin/nginx /home/ljy/app/nginx/sbin/nginx_bak
    cp /usr/local/src/nginx-1.16.0/objs/nginx /home/ljy/app/nginx/sbin/nginx

    6、测试一下复制过来的二进制nginx文件是否生效(截图忘记截了)

    /home/ljy/app/nginx/sbin/nginx -t

     
    7、发送USR2信号给nginx master 进程
    kill -USR2 `cat /home/ljy/app/nginx/nginx.pid`
     
    这句话是网上抄的:
    nginx服务接收到USR2信号后,首先会将旧的nginx.pid文件添加后缀.oldbin,变为nginx.pid.oldbin,然后执行新版本的二进制文件启动服务,如果新的服务启动成功,系统中将有新旧两个Nginx服务共同提供web服务
     
    这关键的图我截下来啦,不然大家肯定会觉得没信服力
    新旧两个nginx提供服务,旧nginx的进程号是28120(cat /home/ljy/app/nginx/nginx.pid)
    8、测试验证

    ls /home/ljy/app/nginx/ -l |grep nginx
    6月13日是旧版本的nginx

    9、通过发送WINCH信号(平缓停止worker process)和QUIT信号(平缓停止Nginx服务)停止旧的Nginx服务进程
    1 kill -WINCH `cat /home/ljy/app/nginx/nginx.pid.oldbin`
    2 kill -QUIT `cat /home/ljy/app/nginx/nginx.pid.oldbin`

    只剩下新版本nginx-1.16.0了
    10、验证测试
    /home/ljy/app/nginx/sbin/nginx -V

    二、nginx-1.18.0修改缺省banner信息

    参考链接:https://blog.csdn.net/yuanzhenwei521/article/details/78819482

    未修复之前显示:Tengine
    改源码重新编译
    1、vim /usr/local/src/nginx-1.18.0/src/http/ngx_http_header_filter_module.c
     修改这堆:
    原来:
    static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
    static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
    static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;
    
    
    
    改成:
    static u_char ngx_http_server_string[] = "Server: hart-edu" CRLF;
    static u_char ngx_http_server_full_string[] = "Server: unkowna" CRLF;
    static u_char ngx_http_server_build_string[] = "Server: unkowna" CRLF;

     2、vim /usr/local/src/nginx-1.18.0/src/core/nginx.h

    13 #define NGINX_VERSION      "1.18.0"
    改成:  
        #define NGINX_VERSION      "0.0.1"

    3、vim /usr/local/src/nginx-1.18.0/src/http/ngx_http_special_response.c   

    36行

     

    未改之前写的是:nginx

    4、重新编译安装nginx-1.18.0

    cd /usr/local/src/nginx-1.18.0
    ./configure --prefix=/home/ljy/app/nginx18 --user=ljy --group=ljy --with-pcre --with-http_ssl_module --with-http_stub_status_module --with-openssl=/usr/local/openssl
     make
     make install

    5、测试验证

     

  • 相关阅读:
    复杂声明的正确解读(*、()、[])
    (多张图片打包为Zip返回前端下载) 记NetCore HttpClient.GetStreamAsync()返回只读流,Stream的Length属性不可用,报错的问题。
    ### Vue开发环境搭建
    计算机网络原理----CRC编码相关问题及解题思路
    CentOS7安装MongoDB4.4.4
    树莓派4B安装.NET Core 3.1 SDK
    基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)
    解决Unity启动报错 Assertion failed on expression: 'SUCCEEDED(hr)'
    @RabbitListener注解导致spring bean注入属性为空 解决方案
    一文彻底讲透@Async注解的原理和使用方法
  • 原文地址:https://www.cnblogs.com/windysai/p/14398646.html
Copyright © 2011-2022 走看看