在修改配置的时候需要进行备份处理。备份的时候建议加上备份时间。
一,隐藏版本号
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的才可以请求资源