【Nginx】Nginx的优化和防盗链

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

nginx版本迭代比较快

*工作中在发版期通常先备份文件并备注时间方便后期故障后回档

例
cp nginx.conf nginx.conf.bak.2023.0805

隐藏版本号的两种方法***

1.修改配置文件

vim /usr/local/nginx/conf/nginx.conf

        在http模块中加入一个人命令

server_tokens off
2.在源码包里改
/opt/nginx-1.22.0/src/core/nginx.h

define NGINX_VERSION "1.1.1"		#修改版本号
define NGINX_VER	"burim/" NGINX_VERSION
配置好之后需要重新编译安装

nginx的日志分割

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 {} \;

nginx的页面压缩

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

gzip on;

vim /usr/local/nginx/conf/nginx.conf

gzip_min_length 1K;
#如果这个文件小于1k就不再进行压缩
gzip_buffers 4 64k;
#压缩的缓冲区大小为64k有4个nginx会使用4个64k大小的缓冲区存储压缩后的数据
gzip_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;
#压缩的类型开启对这些类型的文档的压缩功能

压缩功能是默认自带的可以不取消注释的

但是需要添加压缩细节需要把gzip打开后进行配置

图片缓存

vim /usr/local/nginx/conf/nginx.conf

连接超时

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

keepalive在一段时间内保持打开状态在这段时间内还是会占用资源占用过多还是会影响性能的

配置文件中

keepalive_timeout 65; tcp连接最多可以保持65秒

如果设置为0表示禁用了keepalive的功能只要请求完成立刻关闭tcp连接

长连接

client_header_timeout 80 请求头的超时时间

客户端向服务端发送请求会有一个requst_header的超时时间如果客户端没有在60秒内发送一个完整的请求头nginx会返回408 request timeout请求超时

client_body_timeout 60 请求体的超时时间

客户端没有向服务器在60秒发送一个完整请求体nginx 408 request timeout

ping 超时 表示服务端没有响应/ ip无法上网

nginx的并发设置

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

1.根据cpu的核心数来进行设置

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

2.

worker_cpu_affinity 
#设置worker进程绑定到指定的cpu的命令可以减少cpu切换带来的开销确保worker进程在一个独立的cpu核心上运行

生产中worker一般设置为4如果访问量不大1也足够了

如果要扩展最多到8个

8个以上的worker进程就不会再提高性能了反而会降低性能

worker_cpu_affinity        #绑定worker进程到cpu单个worker进程可以不绑定cpu

TIME_WAIT

不是报错信息是tcp连接状态中的一种状态会出现在tcp连接的四次挥手过程中

四次挥手过程中当连接的一方发送FIN报文而且收到了对方的ack报文后就会进入TIME_WAIT

tcp处理等待的状态是一个持续时间65秒确保网络中的所有数据包都被完全处理完毕

有两个作用

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

2.避免连接复用time_wait的时间太短可能会导致旧的连接仍然在网络中误认为是新连接导致连接复用

而且在连接的生命周期中time_wait占用的资源是非常小的而且对服务器整体性能的影响也很有限

大量的短连接频繁创建和销毁或者大并发连接时在负载均衡的条件下time_wait连接会积累服务器会出现大量time_wait状态的连接这种情况下需要优化处理

nignx本身不能进行优化要靠内核来进行优化

查看系统的所有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_wait_1    表示一端已将发送了连接关闭的请求等待另一端确认
FIN_wait_2    表示另一端已经确认了等待发出端确认关闭请求
close_wait   表示一端已经关闭连接但是应用程序还未关闭连接
closing	     表示正在关闭连接
time_wait    连接等待
last_ack     表示应用程序已经发送了最后确认等待另一端进入closed状态

提问如果有大量timeout积累怎么办

修改内核

vim /etc/sysctl.conf

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
    #表示如果端口有本端要求关闭FIN_WAIT_2状态的保持时间

防盗链

vim /usr/local/nginx/conf/nginx.conf
http {
...........
server{
...........
location ~* \.(jpg|gif|swf)$ {

...
}
}
}


~* \.(jpg|gif|swf)$     这段正则表达式表示匹配不区分大小写以.jpg 或.gif 或.swf 结尾的文件
valid_referers    设置信任的网站*.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的才可以登录

只要不是信任的就重写

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: nginx

“【Nginx】Nginx的优化和防盗链” 的相关文章