nginx的优化和防盗链
重点就是优化:
1、隐藏版本号:
方法一:修改配置文件(修改配置文件前不要忘记备份)如下图
在http模块任意一个位置,加入一个命令:
server_tokens off;
方法二:在源码包里改
/opt/nginx-1.22.0/src/core/nginx.h
#define NGINX VERSION “1.1.1" #引号里面修改版本号,可以修改服务名称
#define NGINX VER "burun/" NGINX VERSION #引号里面修改服务名称
要配置好之后,回到源码包主目录重新配置一下
然后make -j 4 && make install安装即可如果之前置过server_tokens off;把off改为on然后重启服务即可
nginx日志分割:
因为nginx没有自动分割,需要动手已脚本的形式按天进行分割。
写完之后赋权然后./执行
nginx的页面压缩
节约带宽,提升用户的访问速度
首先在配置文件里取消注释
改完配置文件别忘了重启服务
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;
1.压缩的功能是默认自带的,可以不取消注释的,但是需要添加压缩细节,需要把gzip打开后,进行配置。
图片缓存:配置要写在server块里的location块里面
改完重启nginx服务
连接超时:
http1.1会有一个自带的keepalive模式,告诉web服务器在处理完一个请求之后保持当前连接的tcp的状态为打开状态,如果当前连接有新的请求,服务端就会利用这个没有关闭的连接,继续给客户端响应,不需要再建立一个新的连接。
keepalive在一段时间之内保持打开状态,在这段时间之内还是会占用资源,占用过多会影响性能。
keepalive timeout 65;tcp连接最多可以保持65秒。如果设置为0就是禁用keepalive功能。
长连接;
client header_timeout 60;
客户端向服务端发送请求,会有一个request_header的超时时间,如果客户端没有在60秒内发送一个完整的请求头,nginx会返回
408 request time out
client_body_timeout 60;
客户端没有向服务器在60秒发送一个完整请求体,nginx 408 request time out
客户端向服务端发起请求,会有一个request_header的超时时间。如果客户端没有在60秒内发送一个完整的请求体,nginx 408 request time out
★★★★★nginx的并发设置:★★★★★★
在高并发场景中,需要启动更多的nginx进程以保证响应速度。可以更快的处理用户的请求,避免堵塞。
1、查看cpu核心数:cat /proc/cpuinfo | grep processor | wc -l
2、也可以更改配置文件
更改完配置文件要重启服务
3、/worker cpu_affinity设置work进程绑定到指定的cpu的命令。可以减少cpu切换带来的开销,确保worker进程在一个独立的cpu核心上运行。
(0001)代表1 (0010)代表2 (0100)代表3 (1000)代表4
是以十进制数来代表数量
/worker cpu_affinity设置一般为4,访问量不大,1也足够了
如果要扩展:最多到8 16个
8个以上的workr进程就不会再提高性能了,反而会降低性能。8个足够了
/worker cpu_affinity单个worker进程可以不绑定cpu
TIME_WAIT:
不是一个报错信息,是tcp连接状态中的一种状态。出现在tcp连接的四次挥手中。
当链接的乙方发送fin报文,而且收到了对方的ack报文之后,就会进入time_wait
tcp处理等待的状态,是有一个持续时间,65秒,确保网络中的所有数据包都会被完全处理完毕。
有两个作用:
1、确保可靠的关闭连接。如果立刻关闭连接,旧的数据包也会被处理,从而干扰新的连接。
2、避免连接复用,time_wait的时间太短,可能会导致旧的连接仍然在网络中,误认为是新连接,导致连接复用。
而且在连接的生命周期当中,time_wait占用的资源是非常小的,而且对服务器整体性能的影响也很有限。
大量的短链接频繁创建和销毁或者大并发连接时(负载均衡),time_wait的连接会积累,服务器会出现大量的time_wait状态的连接,在这种情况下需要优化处理。
要靠内核设置,进行优化。
查看系统所有tcp连接的状态:
系统连接状态:
closed 表示连接未活动或者关闭
★listen 监听,等待连接
syn_recv: syn接收,服务端收到了来自客户端的syn(连接请求),正在等待确认
syn_sent:syn发送,客户端已经向服务器发送了syn请求,等待服务器确认
★ESTABLISHED:已经建立了tcp连接,正在传送数据
fin_wait1:表示一端已经发送了连接关闭的请求,等待另一端确认
fin wait2: 表示另端已经确认了,等待发出端,确认关闭请求
close _wait: 表示一端已经关闭连接,但是应用程序还未关闭连接
closing:正在关闭
★time wait: 连接等待。
last_ack:表示应用程序已经发送了最后的确认,等待另一端进入closed状态
内核文件
在最后一行加入
配置完之后
立即生效
打开nginx配置文件
在server块下的location块添加
valid_referes设置信任的网站,*.kgc.com kgc.com都可以访问图片
none表示允许没有http_refer的请求访问资源
原来要www.kgc.com/ls.jpg
现在www.kgc.com也可以访问图片。也就是说www.kgc.com可以直接访问www.kgc.com/ls.jpg
blocked: 允许不是http://开头的请求,可以不带协议请求访问资源。
*.kgc.com 只允许域名是kgc的才可以请求资源。
$invalid_referer: 只要不是valid _referers设置信任的网站,统统为true
配置完之后重启服务
然后进入html把error图片拖进去
然后做一下页面准备
进入配置文件删除所有内容
配置防盗链
然后启动另一台安装nginx的虚拟机上
然后删除全部内容添加
这时访问的就是盗链图片了
不过真实不会出现图片盗链而会显示403
总结