nginx的优化和防盗链
重点是优化
一:隐藏版本号
到http模块当中,添加server_tokens off
到源码包里面(cd /src/core) nginx.h的文件打开
NGINX_VER上下两行,修改完毕,然后编译安装
二:nginx的日志分割
nginx不自带日志分割工具,需要手动以脚本的形式来进行分割创建nginx.sh(脚本)内容进行编写
三:nginx的页面压缩
节约带宽,提升用户的访问速度
1、压缩功能是默认自带的,可以不取消注释的
但是需要添加压缩细节,需要吧gzip内部打开后,再进行配置
location ~* \.(gif/jpg/swf/jepg/ico)
连接超时:http1.1会有一个keepalive模式,告诉web服务器再处理一个请求之后继续保持当前连接的tcp的状态为打开状态,如果当前连接有新的请求,服务端就会立刻利用这个没有关闭的连接,继续给客户端响应,不需要再建立一个新的连接
keepalive在一段时间内保持打开状态,再这段时间内还是会占用资源,占用过多就会影响性能
keepalive timeout 65;tcp连接最多只能保持65s
设置为0,就是禁用了keepalive功能,质押请求完成,会立刻关闭tcp连接
———————————————————————————————————————————
nginx的并发设置:
在高并发的场景中,需要启动更多的nginx进程以保证响应速度。可以更快的处理用户的请求,阻障
cat /proc/cpuinfo | grep processor | wc -l
worker_cpu_affinitg设置work进程,绑定到指定的cpu的命令。可以减少cpu、切换带来的开销,确保worker进程在一个独立的cpu核心上运行。
生产中的worker一般设置为4,访问量不大的,设置1也足够了
如果要扩展,最多也是8,16个
8个以上的worker进程,就不会再提高性能了,反而会降低性能
time_wait:
不是一个报错信息,是tcp连接状态中的一种状态。出现在tcp连接的四次挥手当中,当连接的乙方发送fin报文的时候,而且收到了对方的ack报文之后,就会进入time_wait
tcp处理等待的状态,是有一个持续时间的,65秒,确保网络当中的所有数据包都被完全处理完毕。
有两个作用:
1.确保可靠的关闭连接。如果立即关闭连接,旧的数据包也会被处理,从而会干扰新的连接。
2.避免连接复用,time_wait的时间太短,可能会导致旧的连接仍然在网络中,误以为是新的连接,导致连接复用。
而且在连接的生命周期中,time_wait占用的资源是非常小的,而且对服务器整体性能的影响也很有限制。
大量的短连接频繁创建和销毁,或者大并发连接时(负载均衡),time_wait连接会积累,服务器会出现大量的time_wait状态的连接,在这种情况下需要优化处理
查看系统所有的tcp连接的状态
closed表示连接未活动或者关闭
syn_recv:syn接收,服务端收到了来自客户端的syn(链接请求),正在等待确认
syn_sent:syn发送,客户端已经向服务器发送了syn请求,等待服务器确认
ESTABLISHED:已经建立了tcp连接,正在传送数据
fin_wait1:表示一端已经发送了连接关闭的请求,等待另一端确认
fin_wait2:表示另一端已经确认了,等待发出端,确认关闭请求
close_wait:表示一端已经关闭俩基恩,但是应用程序还未关闭连接
closing:正在关闭
time_wait:连接等待
last_ack:表示应用程序已经发送了最后的确认
net.ipv4.tcp_syncookies=1
表示开启syn cookies,当出现SYN队列溢出,启用cookie处理请求
net.ipv4.tcp_tw_reuse=1
表示TIME_WAIT状态的连接可以复用,即使time_wait把本地端口全部占满,也不会拒绝新的请求
net.ipv4.tcp_tw_recycle=1
让time_wait尽快回收
net.ipv4.tcp_fin_timeout=60