nginx优化与防盗链

在修改配置的时候需要进行备份处理。备份的时候建议加上备份时间。

一,隐藏版本号

        1,修改配置文件

                在http模块中加入server_tokens off,

        2,修改源码包

        /src/core/nginx.h

                #define NGINX_VERSION "1.1.1" 修改版本号

                #define NGINX_VER "burun/" NGINX_VERSION 修改服务器类型

        修改完要重新编译安装

二,日志分割:

        Nginx不自带日志分割工具,需要手动以脚本方式分割日志。

#!/bin/bash
#获取日期
d=$(date +%Y-%m-%d)
#定义存储目录
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-08-05.log
mv $logs_error ${dir}/error_${d}.log

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

kill -USR1 $(cat ${pid_file})
#cat /usr/local/nginx/run/nginx.pid

#日志文件清理的命令
find ${dir} -mtime +30 -exec rm -rf {} \;

三,页面压缩

        节约带宽,提升用户的访问速度

        gzip on

                gzip_min_length 1k;若文件小于1k则不压缩

                gzip_buffers 4 64k;   压缩的缓冲区大小为64k,有4个。存储压缩后的数据

                ggzip_http_version 1.1;  压缩版本号,可以不写,默认1.1

                gzip_comp_level 6 压缩比率1-9  越小速度越快,比率越低。

                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;压缩的类型,哪些文档启用压缩功能

        压缩功能是自带的,可以不取消注释,但是如果需要添加细节则需要去掉注释。

四:图片缓存

        Location ~* .\(gif|jpg|swf|jepg|ico)$ {

                Root  html;

                Expires 1d;  设置图片的缓存时间是一天

        }

五:连接超时:

        http1.1会有一个keepalive模式,告诉web服务器在处理完一个请求之后保持当前连接的tcp的状态为打开状态,如果当前连接有新的请求,服务端就会利用这个没有关闭的连接继续给客户端相应,不需要再建立一个新的连接。

        Keepalive再一段时间之内保持打开状态,再这段时间之内还是会占用资源,占用过多会影响性能。

        Keepalive_timeout 65;tcp最多可以保持65秒,设置为0禁用keep

        长连接:

                Client_header_timeout 80 请求头80。客户端想服务端发送请求,会有一个超时时间。若在60s内没有发送一个完整的请求头,nginx会返回408请求超时。

                Client_body_timeout 80  请求体80。客户端想服务端发送请求,会有一个超时时间。若在60s内没有发送一个完整的请求体,nginx会返回408请求超时。

六:Nginx的并发设置:

        在高并发场景中,需要启动更多的nginx进程以保证响应速度,可以更快的处理用户的请求,避免阻塞。

        1,根据cpu的核心数量进行设置

                查看cpu核心数量:cat /proc/cpuinfo | grep processor | wc -l

                /worker_cpu_affinity 设定work进程绑定到指定cpu,可以减少cpu切换带来的开销,确保worker进程在一个独立的cpu核心上的运行。生产中一般worker为4,访问量不大的话1也足够。如果要扩展的话最多8个。再多反而会降低性能。

七,TIME_WAIT:

        出现在tcp连接的四次挥手过程中。用来确保网络中的数据包被完全处理完毕。

                1,确保可靠的关闭连接。如果立刻关闭连接会导致旧数据包也会被处理,从而会干扰新的连接。

                2,避免连接复用。若time_wait时间太短,可能会导致旧的连接仍然在网络中,会被误认为是新连接,导致连接复用。Time_wait占用的资源非常小,而且对服务器整体性能的影响也非常有限。大量的短链接频繁创建或销毁,或者大并发连接时,time_wait会积累,服务器会出现大量time_wait状态的连接,在这种情况下需要优化处理。

        内核设置,进行优化。

        查看系统所有tcp连接的状态:

                netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

                Closed 表示连接未活动或者关闭状态

                Listen  监听,等待网络

                Syn_recv  syn接收,服务端收到了来自客户端的syn(连接请求),正在等待确认

                Syn_sent  syn发送,客户端已经向服务端发送syn请求,正在确认

                Established  已经建立tcp连接,正在传输数据

                Fin_wait1  表示一段已经发送了连接关闭的请求,等待另一端确认

                Fin_wait2  表示另一端已经确认,等待发出端确认关闭请求

                Close_wait  表示一端已经关闭连接,但是应用程序还未关闭连接。

                Time_wait  连接等待

                Closing  正在关闭

                Last_ack     表示应用程序已经发送了最后的确认,等待另一端进入closed状态

                进行配置:

                        vim /etc/sysctl.conf

                        net.ipv4.tcp_syncookies = 1

                        net.ipv4.tcp_tw_reuse = 1

                        net.ipv4.tcp_tw_recycle = 1

                        net.ipv4.tcp_fin_timeout = 60

                        sysctl -p

八,防盗链:

        Valid_referers 设置信任的网站

        None  允许没有http_refer请求访问资源。

        Blocked  允许不是http://开头的请求

        *.kgc.com只允许域名是kgc的才可以请求资源

你可能感兴趣的:(nginx,运维)