C05S04-Nginx的优化

一、隐藏Nginx版本号

1. 修改配置文件

本方法是通用方法,但只能隐藏版本号,无法因此服务名称。

  1. 修改Nginx服务的配置文件nginx.conf,在http模块的全局部分写入以下内容。

    server_tokens off;
    
  2. 保存文件后,检查配置文件是否存在问题,并重启Nginx服务。

    nginx -t
    
    systemctl restart nginx
    

2. 修改源码包

本方法仅适用于编译安装,但是能够隐藏服务名称和版本号。

  1. 修改Nginx源码包中的src/core/nginx.h文件,可自定义版本和服务名称。

    #define NGINX_VERSION      "1.22.0"
    #define NGINX_VER          "nginx/" NGINX_VERSION
    
  2. 保存文件后,重新编译安装。

    cd /usr/local/nginx
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
    make && make install
    

二、切割日志数据

  1. 编写切割日志的脚本文件。

    #! /bin/bash
    
    d=$(date +%Y-%m-%d)
    
    dir="/usr/local/nginx/logs"
    logs_access="/usr/local/nginx/logs/access.log"
    logs_error="/usr/local/nginx/logs/error.log"
    
    pid_file="/usr/local/nginx/run/nginx.pid"
    
    if [ ! -d "$dir" ]
    then
      mkdir -p $dir
    fi
    
    mv ${logs_access} ${dir}/access_${d}.log
    mv ${logs_error} ${dir}/error_${d}.log
    
    kill -USR1 $(cat ${pid_file})
    
    find $dir -mtime +30 -exec rm -rf {} \;
    
  2. 设置脚本的可执行权限。

    chmod +x /opt/nginxlog.sh
    
  3. 设置定时任务,定时执行脚本。

    crontab -e
    
     0 0 * * * /opt/nginxlog.sh
    

三、页面压缩

  1. 编辑Nginx服务的配置文件nginx.conf,在http模块中做出以下修改。

    gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 64k;
    gzip_comp_level 6;
    gzip_vary on;
    gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
    
  2. 保存文件后,检查配置文件是否语法有误,并重启Nginx服务。

    nginx -t 
    systemctl restart nginx
    

四、图片浏览器缓存

  1. 编辑Nginx服务的配置文件nginx.conf,新增一个location模块。

    location ~* \.(gif|jpg|jpeg|png)$ {
        root /var/www/html;
        expires 1d;
    }
    
  2. 保存文件后,检查配置文件是否语法有误,并重启Nginx服务。

    nginx -t
    systemctl restart nginx
    

五、会话连接保持

连接保持和会话保持是网络通信中的两种机制,连接保持是指保持两个主机间的连接,从而减少连接频繁地建立或断开;会话保持是指保持用户和服务端的交互,是对交互的控制。

从HTTP 1.1开始支持keepalive模式,该模式属于连接保持机制。当数据传送完毕之后,连接不会立刻断开,而是一段时间时间之内保持连接,无需再进行三次握手。如果需要传输数据,可以继续使用这个连接。用户可以自定义时长,但是连接保持的时间不宜太长,通常设置在60-180秒,keepalive的连接保持时间太长,会占用过多的系统资源,影响性能。

  1. 编辑Nginx服务的配置文件nginx.conf,在http模块中做出以下修改。

     keepalive_timeout 65;
     client_header_timeout 80;
     client_body_timeout 80;
    
    • client_header _timeout 80:客户端向服务端发送一个完整请求头的超时时间。当80秒内未返回请求,nginx就返回状态码408,408表示请求超时。
    • client_body_timeout 80:客户端向服务端发送一个完整请求体的超时时间。
  2. 保存文件后,检查配置文件是否语法有误,并重启Nginx服务。

    nginx -t
    systemctl restart nginx
    

六、Nginx的并发处理

  1. 查看主机的CPU的核数(线程数)。

    cat /proc/cpuinfo | grep processor | wc -l
    
  2. 编辑Nginx服务的配置文件nginx.conf,在全局模块中做出以下修改。

    worker_processes  2;
    worker_cpu_affinity 0001 0010;
    
    • worker_processes 2:设置任务线程数,数值通常是主机的具体内核数,或者是内核数的2倍。最多不超过8,一旦数目超过8,性能反而会降低。
    • worker_cpu_affinity 0001 0010:绑定CPU核心,使用二进制表示。0001表示CPU核心0,0010表示CPU核心1。
  3. 保存文件后,检查配置文件是否语法有误,并重启Nginx服务。

    nginx -t
    systmctl restart nginx
    

七、TIMEWAIT回收机制

TIMEWAIT是四次挥手时,主机的一个连接状态,这时候的TCP连接还没有断开,等待一定时间,确保数据报文传输完毕。该机制可以保证未传输完成的数据报文不会影响新的TCP连接,以及避免TCP连接复用的问题。

  1. 修改系统的内核文件/etc/sysctl.conf,在文件中写入以下内容。

    # 表示开启SYN cookies(同步位缓存),当syn等待连接队列溢出,启用cookies来进行处理。
    net.ipv4.tcp_syncookies=1
    
    # 让time_wait状态的连接可以重用,time_wait状态的连接占用了所有端口,也不会拒绝新的请求
    net.ipv4.tcp_tw_reuse=1
    
    # 让time_wait尽快回收  60-120s,ubuntu内核不支持这个配置,centos7支持,8版本开始也不支持。
    # net.ipv4.tcp_tw_recycle=1
    
    # 保持在fin-wait-2状态的时间。表示套接字文件由本端要求关闭,这个参数决定了关闭的间隔
    net.ipv4.tcp_fin_timeout=65
    
  2. 保存文件后,启用内核配置。

    sysctl -p
    

八、配置防盗链

  1. 编辑Nginx服务的配置文件nginx.conf,在location中做出以下修改。

    location ~* \.(gif|jpg|jpeg|png)$ {
        root /var/www/html;
        expires 1d;
        valid_referers none blocked *.xy104.com xy104.com;
        if ($invalid_referer) {
          # rewrite ^/ http://www.xy104.com/error.png;
          return 403;
        }
    }
    
  2. 保存文件后,检查配置文件语法并重启Nginx服务。

    nginx -t
    systemctl restart nginx
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值