【Nginx】Nginx的优化和防盗链

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.hdefine 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" ]
thenmkdir -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.confgzip_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.confnet.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.jpgblocked        允许不是http://开头的请求,可以不带协议的请求访问资源
*.kgc.com      只允许域名是kgc的才可以登录

只要不是信任的,就重写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/85854.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

孤立随机森林(Isolation Forest)(Python实现)

目录 1 简介 2 孤立随机森林算法 2.1 算法概述 2.2 原理介绍 2.3 算法步骤 3 参数讲解 4 Python代码实现 5 结果 1 简介 孤立森林(isolation Forest)是一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划…

【JavaEE】Spring Boot - 日志文件

【JavaEE】Spring Boot 开发要点总结(3) 文章目录 【JavaEE】Spring Boot 开发要点总结(3)1. 日志有什么作用2. 日志格式2.1 日志框架原理 3. 日志的打印3.1 System.out.println3.2 使用日志框架3.3 日志级别3.3.1 设置默认日志显…

一文盘点 Zebec 生态的几个利好预期

Zebec Protocol 是目前商业进展最快的流支付体系,也是推动流支付向 Web2 世界发展的主要生态。目前,其已经与包括 Visa、Master 等支付巨头展开了合作,以推出银行卡的方式进一步向金融发达地区推出 Zebec Card 以拓展业务,前不久其…

Flutter父宽度自适应子控件的宽度

需求: 控件随着金币进行自适应宽度 image.png 步骤: 1、Container不设置宽度,需要设置约束padding; 2、文本使用Flexible形式; Container(height: 24.dp,padding: EdgeInsetsDirectional.only(start: 8.dp, end: 5.d…

【算法学习】高级班九

这种互为旋变串&#xff1a; 给定两个字符串&#xff0c;判断是否互为旋变串 代码&#xff1a; 打表法&#xff1a; 每一层内的数字不互相依赖&#xff0c;只依赖它下面的层但实际上size会约束L1和L2的值&#xff0c;即L1和L2<N-size 思路&#xff1a;设置一个窗口…

【论文阅读】NoDoze:使用自动来源分类对抗威胁警报疲劳(NDSS-2019)

NODOZE: Combatting Threat Alert Fatigue with Automated Provenance Triage 伊利诺伊大学芝加哥分校 Hassan W U, Guo S, Li D, et al. Nodoze: Combatting threat alert fatigue with automated provenance triage[C]//network and distributed systems security symposium.…

面试热题(二叉树的锯齿形层次遍历)

给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3…

前端面试自我介绍

前端面试自我介绍精选篇1 各位面试官大家好&#xff0c;我叫__&#xff0c;就读于__大学__学&#xff0c;大学本科学历&#xff0c;我的求职意向是与金融专业相关的职位&#xff0c;本人拥有较强的学习能力&#xff0c;能快速适应工作环境&#xff0c;兴趣爱好广泛&#xff0c…

基于k8s job设计与实现CI/CD系统

方案一&#xff1a;Jenkinsk8sCICD 方案二&#xff1a;kanikok8s jobCICD CICD 基于K8s Job设计流水线 CI方案 工具镜像 云原生镜像打包工具 kaniko的使用 与Jenkins对比 可用性与易用性

20230811导出Redmi Note12Pro 5G手机的录音机APP的录音

20230811导出Redmi Note12Pro 5G手机的录音机APP的录音 2023/8/11 10:54 redmi note12 pro 录音文件 位置 貌似必须导出录音&#xff0c;录音的源文件不知道存储到哪里了&#xff01; 参考资料&#xff1a; https://jingyan.baidu.com/article/b87fe19e9aa79b1319356842.html 红…

cesium学习记录07-实体(Entity)

在学习记录05中&#xff0c;我们将了如何在 Cesium 中加载各种数据&#xff0c;包括矢量数据、影像图层、地形和 3D 模型。这些数据为我们构建了一个基础的场景和背景。特别是在加载 3D 模型时&#xff0c;我们采用了 viewer.scene.primitives.add 方法将模型作为一个原始对象添…

Chapter 12: Regular expressions | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介Regular ExpressionsRegular ExpressionsCharacter matching in regular expressionsExtracting data using regular expressionsCombining searching and extractingEscape characterSummaryBonus section for Unix / Linux usersDebugg…

智安网络|恶意软件在网络安全中的危害与应对策略

恶意软件是指一类具有恶意目的的软件程序&#xff0c;恶意软件是网络安全领域中的一个严重威胁&#xff0c;给个人用户、企业和整个网络生态带来巨大的危害。通过潜伏于合法软件、邮件附件、下载链接等途径传播&#xff0c;破坏用户计算机系统、窃取敏感信息、进行勒索等不法行…

商城-学习整理-基础-库存系统(八)

一、整合ware服务 1、配置注册中心 2、配置配置中心 3、配置网关&#xff0c;重启网关 二、仓库维护 http://localhost:8001/#/ware-wareinfo 在前端项目module中创建ware文件夹保存仓库系统的代码。 将生成的wareinfo.vue文件拷贝到项目中。 根据功能&#xff0c;修改后台接…

PHP最简单自定义自己的框架view使用引入smarty(8)--自定义的框架完成

1、实现效果。引入smarty&#xff0c; 实现assign和 display 2、下载smarty&#xff0c;创建缓存目录cache和扩展extend 点击下面查看具体下载使用&#xff0c;下载改名后放到extend PHP之Smarty使用以及框架display和assign原理_PHP隔壁老王邻居的博客-CSDN博客 3、当前控…

Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群

目录 高可用&#xff1a; 为什么需要高可用呢&#xff1f; 高可用的主要作用&#xff1a; keepalived是什么&#xff1f;它用在哪里&#xff1f; 什么是VRRP协议&#xff0c;它的作用是什么&#xff1f; 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项…

html实现iphone同款开关

一、背景 想实现一个开关的按钮&#xff0c;来触发一些操作&#xff0c;网上找了总感觉看着别扭&#xff0c;忽然想到iphone的开关挺好&#xff0c;搞一个 二、代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&qu…

【网络编程(二)】NIO快速入门

NIO Java NIO 三大核心组件 Buffer&#xff08;缓冲区&#xff09;&#xff1a;每个客户端连接都会对应一个Buffer&#xff0c;读写数据通过缓冲区读写。Channel&#xff08;通道&#xff09;&#xff1a;每个channel用于连接Buffer和Selector&#xff0c;通道可以进行双向读…

PHP傻瓜也能搭建自己框架

PHP最简单自定义自己的框架&#xff08;一&#xff09; PHP最简单自定义自己的框架创建目录结构&#xff08;二&#xff09; PHP最简单自定义自己的框架定义常量自动生成目录&#xff08;三&#xff09; PHP最简单自定义自己的框架控制器自动加载运行&#xff08;四&#xf…

《Java-SE-第三十四章》之Optional

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…