当前位置: 首页 > news >正文

nginx的优化和防盗链 重要!!!

实验一、隐藏版本号

 要把nginx的版本号隐藏起来,防止恶意攻击

方法一:修改配置文件

在http模块中加入一个命令

server_token off;

过程:

 备份,改配置文件一定要备份

 修改配置文件

 在http模块中添加   server_tokens off;

重启一下服务 ,再回到网页查看版本号是否被隐藏

 这时发现已经被隐藏了

方法二:在源码包里修改

在nginx源码包里src/core/ 中nginx.h的文件中

修改源码包

 

 

在源码包里进行修改要想生效,需要在源码包的主目录重新编译一下

 

 

 在配置文件中把server_tokens打开

重启服务 

 回到浏览器刷新一下,修改成功

总结:两个方法会一个即可,

实验二:nginx日志分割

nginx不自带日志分割工具,需要手动以脚本的形式进行日志分割

 访问成功记载access.log

访问失败记录在error.log

先看一下日志的时间格式怎么写 

 写一个脚本

 

#!/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 $dir
fi

# 移动日志并重命名文件
mv ${logs_file} ${dir}/access_${d}.log
mv ${logs_error} ${dir}/error_${d}.log

# 发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件
kill -USR1 $(cat ${pid_file})

#日志文件清理,将30天前的日志进行清除
find $logs_path -mtime +30 -exec rm -rf {} \;

 

赋权执行

查看一下log里面有两个新的日志文件 

 里面记录了8月5日的日志

实验三:nginx的页面压缩

页面压缩可以节约带宽,提高用户的访问速度

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

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

修改配置文件

 

 取消注释,开启gzip的压缩功能

 接着添加代码

   gzip_min_length 1k;        

   #最小压缩文件的大小      
   gzip_buffers 4 64k;      

   #压缩缓冲区,大小为4个64K缓冲区,Nginx 会使用 4 个 64KB 大小的缓冲区来存储压缩后的数据。
   gzip_http_version 1.1;    

   #压缩版本,默认为1.1
   gzip_comp_level 6;        

   #压缩比率(压缩等级为1-9,6是中等等级,也是常用等级)Gzip 压缩级别的范围是 1 到 9,
   其中 1 表示压缩速度最快,但压缩比最低,9 表示压缩速度最慢,但压缩比最高。默认值为 1。
   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压缩功能是否打开

实验四:图片缓存

 拖一个图片到html中

可以在网页看到拖入的图片,f12查看一下,Cache-Control:max-age=0 表示图片没有缓存,下次查看图片还需要把图片再下载一次,下面设一个缓存

在location块下面直接添加 

~*:正则匹配

\.:就是点

(gif|jpg|jepg|bmp|ico):里面不能用png格式的,会陷入死循环

获取图片的根目录为  root  html

expires 1d;    #设置缓存时间为一天;         

重启一下让配置生效 

 在浏览器里刷新一下并查看,缓存时间已经改为1天

连接超时:

连接超时在配置文件中的位置

 

http1.1会有一个keepalive模式,主要作用是告诉web服务器,他在处理完一个请求之后保持当前连接的tcp状态为打开状态,也就是在请求完之后不会立刻关闭,而是保持一个打开的状态。

如果当前连接有新的请求,服务端就会利用这个没有关闭的连接,继续给客户端响应,不需要再建立一个新的连接。大大节约了资源。

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

图中的keepalive_timeout  65;  意思是tcp连接最多可以保持65秒

设置为0,就是禁用了keepalive功能。只要请求完成立刻关闭tcp连接

实验五:nginx的并发设置

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

1、cpu的核心数来进行设置

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

2、设置worker进程绑定到指定的cpu的命令,减少cpu切换带来的开销。

确保worker进程在一个独立的cpu核心上运行(在工作中也用得到)

 修改配置文件

 把1改成4

重启服务 

 查看一下进程,worker进程变为4个

 每个work进程可以处理1024个文件数,总共可以处理的文件数为4*1024=4096个

但是还需要使用ulimit  -n解除限制

面试会问

设置worker进程绑定到指定的cpu的命令,减少cpu切换带来的开销。

确保worker进程在一个独立的cpu核心上运行(在工作中也用得到)

01表示cpu1  10表示cpu2  100表示cpu3  这个是按二进制转10进制算的

在生产中worker一般设置为4,访问量不大时1也足够了,如果要扩展,最多8或16个

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

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

TIME_WAIT:不是一个报错信息,是tcp连接状态中的一种状态,出现在tcp连接的四次挥手中

处于FIN=1和ack=1之间

当连接的乙方发送FIN报文,而且收到了对方的ack报文之后,就会进入TIME_WAIT  tcp处理等待的状态,是有一个持续时间,65秒,确保网络中的所有数据包都被完全处理完毕。

TIME_OUT有两个作用: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]}'

tcp的连接状态:

CLOSED(关闭):表示该连接处于未活动状态,或者连接已经关闭。

LISTEN(监听):表示服务器正在等待来自客户端的连接请求,处于监听状态。

SYN_RECV(SYN 接收):表示服务器已经接收到来自客户端的 SYN 请求(连接请求),正在等待确认。

SYN_SENT(SYN 发送):表示应用程序已经向服务器发送了 SYN 请求,正在等待服务器确认。

ESTABLISHED(已建立):表示连接已经建立,正常的数据传输阶段。

FIN_WAIT1(终止等待1):表示应用程序已经发送了连接关闭请求(FIN),正在等待另一端的确认。

FIN_WAIT2(终止等待2):表示另一端已经确认连接关闭请求,正在等待另一端发送连接关闭请求。

CLOSE_WAIT(关闭等待):表示另一端已经关闭连接,但本地应用程序还未关闭连接。

CLOSING(正在关闭):表示双方同时尝试关闭连接。

TIME_WAIT(时间等待):表示连接已经关闭,但仍在等待一段时间,以确保网络中所有的数据包都已经被正确处理。

LAST_ACK(最后确认):表示应用程序已经发送了最后的确认,等待另一端的确认后进入 CLOSED 状态。

如何清理time_wait?   修改内核文件

内核文件位置

 

net.ipv4.tcp_syncookies = 1       
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理请求。

net.ipv4.tcp_tw_reuse=1
#让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍 默认是0。

net.ipv4.tcp_tw_recycle=1         
#让TIME_WAIT尽快回收 默认0。

net.ipv4.tcp_fin_timeout=65        
#表示如果端口由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

实验六:配置防盗链

valid_referers :设置信任的网站,可以正常使用图片;
none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com 访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com 这个链接过来的。
blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com

$invalid_referer:只要不是valid_referers设置现任的网站,都为true

vim /usr/local/nginx/conf/nginx.conf
http {
......
    server {
    ......
        location ~* \.(jpg|gif|swf)$ {
            valid_referers none blocked *.kgc.com kgc.com;
            if ( $invalid_referer ) {
                rewrite ^/ http://www.kgc.com/error.png;
                #return 403;
            }
        }
    ......
    }
}

 

网页准备:
Web源主机(192.168.146.20)配置:
cd /usr/local/nginx/html
将game.jpg、error.png文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="game.jpg"/>
</body>
</html>

echo "192.168.146.20 www.kgc.com" >> /etc/hosts

echo "192.168.146.30 www.benet.com" >> /etc/hosts

盗链网站主机(192.168.146.30):
cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.kgc.com/game.jpg"/>
</body>
</html>

echo "192.168.146.20 www.kgc.com" >> /etc/hosts

echo "192.168.146.30 www.benet.com" >> /etc/hosts

 

在盗图网站主机上进行浏览器验证

http://www.benet.com

相关文章:

nginx的优化和防盗链 重要!!!

实验一、隐藏版本号 要把nginx的版本号隐藏起来&#xff0c;防止恶意攻击 方法一&#xff1a;修改配置文件 在http模块中加入一个命令 server_token off&#xff1b; 过程&#xff1a; 备份&#xff0c;改配置文件一定要备份 修改配置文件 在http模块中添加 server_tokens …...

十五.redis缓存穿透,击穿,雪崩

redis哨兵模式 一.缓存穿透1.概念2.解决方案1&#xff09;接口校验2&#xff09;缓存空值3&#xff09;布隆过滤器4&#xff09;实时监控 二.缓存击穿1.概念2.解决方案1&#xff09;设置热点数据永不过期2&#xff09;加互斥锁3&#xff09;”提前“使用互斥锁 / 逻辑过期4&…...

Spring源码——初识Spring容器

Spring源码之工厂&#xff08;容器&#xff09; 为什么把Spring的工厂又叫做容器呢&#xff1f; 工厂的责任是创建对象&#xff0c;但是创建完对象后还要进行存储&#xff08;针对于单例的对象来讲&#xff09;&#xff0c;以供其他地方使用&#xff0c;这就是容器。为了能存…...

arcgis--数据库构建网络数据集

1、打开arcmap软件&#xff0c;导入数据&#xff0c;如下&#xff1a; 该数据已经过处理&#xff0c;各交点处均被打断&#xff0c;并进行了拓扑检查。 2、在文件夹下新建文件数据库&#xff0c;名称为路网&#xff0c;在数据库下新建要素类&#xff0c;并导入道路shp文件&…...

华为OD机试真题【西天取经】

1、题目描述 【西天取经】 唐僧师徒四人去西天取经&#xff0c;一路翻山越岭。一日&#xff0c;师徒四人途径一个 mxn 长方形区域&#xff0c;已知 1.将取经队伍作为一个整体&#xff0c;4 人行走相同路线。 2.取经队伍的起点为该长方形区域的左上角&#xff0c;目的地为该长方…...

心电信号时域特征分析与Python实现

目录 1 引言 2 心电信号时域特征的含义 3 Python实现心电信号时域特征提取 4 结论 1 引言 心电信号是由心脏电活动引起的电信号...

认识MyBatis 之 MyBatis的动态SQL

前言 本篇介绍MyBatis里如何使用动态SQL&#xff0c;了解如何去简单使用动态标签&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言MyBatis - 动态 SQLif标签trim标签where标签update set 标签delet…...

【项目 计网2】4.4网络模型 4.5协议 4.6网络通信的过程

文章目录 4.4网络模型OSI七层参考模型TCP/IP四层模型&#xff08;常用&#xff09;简介四层介绍 4.5协议简介常见协议UDP协议TCP协议IP协议以太网帧协议&#xff08;MAC地址封装&#xff09;ARP协议&#xff08;IP->MAC&#xff09; 4.6网络通信的过程封装分用 4.4网络模型 …...

redis入门3-在java中操作redis

Redis的java客户端 Jedis、Lettuce、Redisson、以及spring提供的spring data redis Jedis操作redis //添加依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version> </dep…...

网络安全预警分类流程

网络安全预警指南 随着信息技术的广泛应用与快速发展&#xff0c;传统业务与信息系统的融合程度不断加深&#xff0c;网络安全对国家政治、经济、文化、公共服务活动的影响进一步增大。网络安全形势日趋复杂&#xff0c;安全威胁不断变化&#xff0c;利用网络漏洞、恶意程序从…...

SpringBoot复习:(20)如何把bean手动注册到容器?

可以通过实现BeanDefinitionRegistryPostProcessor接口&#xff0c;它的父接口是BeanFactoryPostProcessor. 步骤&#xff1a; 一、自定义一个组件类&#xff1a; package com.example.demo.service;public class MusicService {public MusicService() {System.out.println(&q…...

VLT:Vision-Language Transformer用于引用的视觉语言转换和查询生成分割

摘要 在这项工作中&#xff0c;我们解决了引用分割的挑战性任务。引用分割中的查询表达式通常通过描述目标对象与其他对象的关系来表示目标对象。因此&#xff0c;为了在图像中的所有实例中找到目标实例&#xff0c;模型必须对整个图像有一个整体的理解。为了实现这一点&#…...

【开源项目--稻草】Day04

【开源项目--稻草】Day04 1. 续 VUE1.1 完善VUEAJAX完成注册功能 Spring验证框架什么是Spring验证框架使用Spring-Validation 稻草问答-学生首页显示首页制作首页的流程开发标签列表标签列表显示原理 从业务逻辑层开始编写控制层代码开发问题列表开发业务逻辑层开发页面和JS代码…...

【数模】奇异值分解SVD和图形处理

介绍奇异值分解在图形压缩中的运用&#xff0c;并将简单介绍下Matlab对于图形和视频的处理 一、奇异值分解介绍 1.1 基本概念 奇异值分解(Singular Value Decomposition&#xff0c;以下简称SVD)是线性代数中一种重要的矩阵分解&#xff1a; U和V都是正交矩阵∑是奇异值矩阵&…...

mongodb-win32-x86_64-2008plus-ssl-3.6.23-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.6\binC:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin>mongod --dbpath C:\Mongo…...

华为Euler系统忘记密码之密码重置

目录 1. 进入GRUB引导菜单编辑模式2. 指定系统在启动时使用/bin/sh作为初始化进程3. 修改密码3.1 重新挂载文件系统&#xff0c;使文件系统可写3.2 修改密码3.3 重新标记文件的安全上下文 4. 开机输入修改的密码正常登录 1. 进入GRUB引导菜单编辑模式 启动openEuler&#xff0…...

Java-多线程-深入理解ConcurrentHashMap

目录 什么是ConcurrentHashMap&#xff1f;为什么有ConcurrentHashMap&#xff1f;和HashMap区别示例代码对比 JDK7和JDK8中ConcurrentHashMap整体架构的区别JDK7中JDK8中 ConcurrentHashMap的基本功能在性能方面的优化使用到的技术-CAS概念说明比较并交换的过程如下&#xff1…...

没有配置redis但是报错连接redis失败

问题 没有配置redis但是报错连接redis失败 检查maven配置是否引入了redis依赖&#xff08;可能是传递依赖&#xff0c;最好检查引进来的公共工程 解决办法 只需要在该工程application.yml文件中配置一下 redis就好&#xff0c;或者移除redis依赖 spring:redis:password: hos…...

剑指 Offer 04. 二维数组中的查找

力扣 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示例: 现有矩阵 matrix…...

【工作中问题解决实践 九】Spring中事务传播的问题排查

最近在工作中遇到了两个关于事务操作的问题&#xff0c;顺便就着这两个问题又回顾了一遍Spring的事务相关的操作&#xff0c;想着一次性把这个问题研究明白了&#xff0c;后续使用事务的时候也能踏实点&#xff0c;让事务发挥真实的作用 什么是事务&#xff1f;什么是事务管理…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...