• nginx的优化和防盗链


    nginx的优化和防盗链

    nginx的优化

    1、隐藏版本号:

    bug多。更新版本速度比较快,所以一旦版本号暴露出去,有可能给对方提供攻击的漏洞

    curl -I(大写i) 192.168.233.30

    在http大模块中修改,不在server中,也不是location

    (1)第一种方式:在配置文件nginx.conf中修改的命令是加上一行:server_tokens off

    (2)第二种方式:修改源码文件,重新编译安装:

    在源码包里面修改配置文件;修改完之后要重新配置,编译和安装;隐藏版本号打开

    2、nginx的日志分割:

    nginx没有自带的日志分割功能,靠我们运维人员通过脚本实现日志分割

    在opt里创建一个文件(vim nginxlog.sh)

    #!/bin/bash

    #按照时间来进行分割,每天都生成一个新的日志

    #获取日期

    d=$(date +%Y-%m-%d)

    #找到nginx日志的存储位置

    dir="/usr/local/nginx/logs"

    #定义分割的源日志

    logs_file='/usr/local/nginx/logs/access.log'

    logs_error='/usr/local/nginx/logs/error.log'

    #定义nginx的PID文件

    pid_file='/usr/local/nginx/run/nginx.pid'

    if [ ! -d "$dir" ]

    then

      mkdir -p $dir

    fi

    #移动日志并重命名日志文件

    mv ${logs_file} ${dir}/access_${d}.log

    #mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_2023-10-12.log

    mv ${logs_error} ${dir}/error_${d}.log

    #发送信号给nginx主进程,让nginx重新生成一个新的日志文件

    kill -USR1 $(cat ${pid_file})

    #USR1 生成一个新的日志 cat /usr/local/nginx/run/nginx.pid

    #日志清理 日志清理原则:业务日志一般保留30天。数据库日志,保留2年。用户信息加密,而且要永久保存。高可用。

    #业务日志如果最近无重大事项,保留10天之内的也可以,但是要申请批准。

    find $dir -mtime +30 -exec rm -rf {} \;

    还需要赋权chmod 777,以及crontab -e -u root指定root来执行定时任务***** /opt/nginxlog.sh

    3、网页压缩:

    nginx:

    http_gzip_static_module:可以对文件内容和图片进行压缩的功能,节约宽带,提升用户的访问速度

    (1)cd /usr/local/nginx/conf/

    (2)cp nginx.conf nginx.conf.bak.2003.10.12

    (3)vim nginx.conf

    找到gzip on,然后取消注释

    gzip on:开启压缩功能

    gzip_min_lenght 1k:如果文件的大小是1k,不再进行压缩处理

    gzip_comp_level 6:压缩级别:压缩比率 1-9   1是速度快,压缩比最低,9压缩的速度最慢,但是压缩比最高,默认是1

    gzip_comp on:前端的缓存也可以支持压缩

    支持压缩的所有类型 :gzip_types  text/plain  image/jpg  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;

    4、nginx的图片缓存时间

    可以在日后访问时,不需要经常的想后台请求数据,加快访问速度

    一般是针对静态页面,动态不设置缓存时间

    (1)cd /usr/local/nginx/conf/

    (2)vim nginx.conf

    在location后面再添加一个:

    location ~* \.(gif|jpg|jepg|bmp|ico)$ {

    root html;

    expires 1d;

    }

    (3)systemctl restart nginx

    5、连接超时:

    keepalive_timeout 60 - 120

    (1)cd /usr/local/nginx/conf/

    (2)vim nginx.conf

    找到 #keepalive_timeout  0;

    在后面添加两行

    keepalive_timeout  60;

        client_header_timeout 80;

    #客户端向服务端发送一个完整request header的超时间,如果客户端在80秒内没有发送一个完整的请求头,nginx将会返回408,request time out

    6、nginx并发设置:

    在高并发的场景下,需要nginx启动更多的进程来保证快速响应

    cpu

    根据cpu的核心数,可以调整nginx的工作进程数

    查看cpu核数的命令:

    (1)cat /proc/cpuinfo | grep -c processor

    (2)cat /proc/cpuinfo | grep processor | wc -l

    面试题:

    work_procersses 4;

    worker_connerctions 15000;

    60000个

    别忘了修改limits.conf

    8个以上性能降低;

    面试题:

    TIME_WAITD大量出现,该如何优化?

    time_wait是tcp连接状态中的一种,不是报错!出现在四次挥手之后

    在time_wait状态下,tcp处于连接等待状态,等待有一个持续时间 http1.1的会话保持

    1、确保可靠的关闭连接

    2、避免连接复用

    他在连接正常关闭之后,一段时间之后,自动消失。而且占用的资源很少,对服务器性能的影响有限

    net.ipv4.tcp_syncookies = 1

    #表示开SYN cookies

    当出现SYN等待队列溢出时,启用cookies处理syn队列,默认是0 。1开启。

    net.ipv4.tcp_tw_reuse = 1

    #time_wait状态可以重用,一个连接就要占用一个端口,time_wait把所有的端口全部占满了,新的连接请求也不会拒绝。

    net.ipv4.tcp_tw_recycle = 1

    #让time_wait尽快回收。

    net.ipv4.tcp_fin_timeout = 60 # 所有time_wait 最大的生命周期60秒。

    nginx的内置变量:打印结果

    $remote_addr:显示客户端的ip地址

    $remote_port:显示客户端的端口号

    $uri:显示请求的uri

    $host:显示请求的主机名

    $request_method:显示请求的方法

    重要的变量:

    proxy_set_header X-Forwarded-for $remote_addr

    #代理服务器设置这个变量,客户端的真实要发送给后端,否则代理服务器地址会被拉入黑名单

    proxy_set_header X-Real-IP $remote_addr

    #客户端的真实ip,发送给后端,现在所有的网站都会要求客户端请求时,加上真实ip

    微信,微博,B站,都会显示ip地址

    防盗链:

    防止其他网站盗用本站的图片

    valid_referers:设置信任的网站

    kgc.com www.kgc.com

    *.kgc.com

    nine:允许没有http_refer的请求访问资源,请求url里面可以不包含refer可以不带uri

    www.kgc.com/ls.jpg

    www.kgc.com = www.kgc.com/ls.jpg

    blocked:请求网站时,前面可以不带协议(也就是类似于http)

    if( $invalid_referer ) {

            rewrite ^/ http://www.kgc.com/errer.png

    }

    如果连接资源是来自于上面

    默写:

    1、nginx有哪些优化,简述配置过程

    (1)隐藏版本号

    http模块的全局配置:server_tokens off

    改源码文件

    2日志分割

    3、页面压缩

    gzip on;取消注释

    4缓存时间

    worker_process 4

    worker_cpu_affinity 0001  0010  0100  1000

    worker_connection 15000;

    4*15000=60000

    limits.conf 656534

    5、压缩图片

    expires 1d;

    time_wait

    小的业务,不需要关注

  • 相关阅读:
    Flink的检查点和保存点
    【图像处理与机器视觉】图像处理概述与像素
    React基础(叁)———事件处理
    springboot+maven多环境动态配置,以及编译失败的解决方案
    虚拟机中对已经存在的磁盘扩容
    这些 function 的细节你都知道吗?
    如何给Github上的开源项目提交PR?
    二维码智慧门牌管理系统:让城市管理更高效、更便捷
    业务流程管理BPM到底有什么用
    跟我学c++中级篇——Pimpl
  • 原文地址:https://blog.csdn.net/wyh20030130/article/details/133866548