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

news2024/9/27 23:30:39

实验一、隐藏版本号

 要把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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

城市与AI,正待济沧海

厦门&#xff0c;自古以来是海上丝绸之路的战略支点&#xff0c;是中国海洋贸易网络中的明珠。外来的理念与技术自厦门而入&#xff0c;中国的文化与商品自厦门而出。新事物、新科技往往在这里焕发最耀眼的生机——比如说&#xff0c;人工智能。 多年来&#xff0c;厦门持续推进…

外部排序算法总结

一.内排总结 在之前博客里&#xff0c;博主已经介绍了各种内部排序算法的原理和C语言代码实现&#xff0c;不懂的朋友可以在同系列专栏里选择查看&#xff0c;今天介绍常见排序算法的最后一点&#xff0c;也就是外部排序。在此之前&#xff0c;我们先对外部排序的各种算法做一…

Centos7/8 安装/配置 Redis5

目录 一、安装 Redis 二、创建符号链接 1.针对可执行程序设置符号链接 2.针对配置文件设置符号链接 三、修改配置文件 1.修改 ip 地址 2.关闭保护模式 四、设置工作目录 1.创建工作目录 2.在配置文件中&#xff0c;配置工作目录 五、设置日志文件 1.创建日志目录 2…

vue3中的自定义指令用法

我们都知道vue2中自定义指令全局和局部是这样写的 局部&#xff1a; 全局&#xff1a; 可vue3写法发生改变&#xff0c;如下&#xff1a; 全局&#xff1a; 局部&#xff1a;

python高阶技巧

目录 设计模式 单例模式 具体用法 工厂模式 优点 闭包 案例 修改闭包外部变量 闭包优缺点 装饰器 装饰器原理 装饰器写法 递归 递归的调用过程 递归的优缺点 用递归计算阶乘 设计模式 含义&#xff1a;设计模式是一种编程套路&#xff0c;通过这种编程套路可…

Docker极速安装Jenkins

安装 Jenkins 是一个常见的任务&#xff0c;使用 Docker 进行安装可以简化该过程并确保环境一致性。以下是在 Docker 中安装 Jenkins 的详细步骤&#xff1a; 安装 Docker: 首先&#xff0c;请确保您已在目标机器上安装了 Docker。根据您的操作系统&#xff0c;可以在 Docker 官…

展示Streamlit文本魔力(六):从头顶到脚尖

文章目录 1 前言✨2 st.markdown - 引入丰富的Markdown文本3 st.title - 引入引人注目的大标题4 st.header - 引入简洁的小标题5 st.subheader - 添加次级标题6 st.caption - 添加解释性文字7 st.code - 显示代码块8 st.text - 显示文本9 st.latex - 显示LaTeX公式10 st.divide…

【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)

这篇文章&#xff0c;主要介绍如何使用JavaFreemarker模板引擎&#xff0c;根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;创建Freemarker工具类 &…

linux下绑定进程到指定CPU的操作方法

taskset简介 # taskset Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]] Show or change the CPU affinity of a process. Options: -a, --all-tasks operate on all the tasks (threads) for a given pid -p, --pid operate on ex…

高级web前端开发工程师的职责说明(合集)

高级web前端开发工程师的职责说明1 职责&#xff1a; 1、根据需求文档&#xff0c;完成PC端、移动端页面及交互的开发&#xff0c;并保证兼容性和确保产品具有优质的用户体验; 2、熟练使用 HTML 、 CSS 、 JS 、 Ajax 等技术&#xff0c;能解决各种浏览器兼容性问题&#xff…

小鱼深度产品测评之:阿里云容器服务器ASK,一款不需购买节点,即可直接部署容器应用。

容器服务器ASK测评 1、引言2、帮助文档3、集群3.1集群列表3.1.1 详情3.1.1.1概览 tab3.1.1.2基本信息 tab3.1.1.4集群资源 tab3.1.1.5 集群日志 tab3.1.1.6 集群任务 tab 3.1.2 应用管理3.1.2.1 详情3.1.2.2 详情3.1.2.3 伸缩3.1.2.4 监控 3.1.3 查看日志3.1.3.1 集群日志3.1.3…

【网络基础实战之路】设计网络划分的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…

机器学习笔记之优化算法(十)梯度下降法铺垫:总体介绍

机器学习笔记之优化算法——梯度下降法铺垫&#xff1a;总体介绍 引言回顾&#xff1a;线搜索方法线搜索方法的方向 P k \mathcal P_k Pk​线搜索方法的步长 α k \alpha_k αk​ 梯度下降方法整体介绍 引言 从本节开始&#xff0c;将介绍梯度下降法 ( Gradient Descent,GD ) …

vue2-组件和插件的区别

1、组件是什么&#xff1f; 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念&#xff08;组件&#xff09;来实现开发的模式&#xff0c;在vue中每一个.vue文件都可以被视为一个组件。 组件的优势&#xff1a; 降低整个系统的耦合度&#xff0c;在保持接口不变的情况下…

学C的第三十二天【动态内存管理】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十一天【通讯录的实现】_高高的胖子的博客-CSDN博客 1 . 为什么存在动态内存分配 学到现在认识的内存开辟方式有两种&#xff1a; 创建变量&#xff1a; int val …

ardupilot 中坐标变换矩阵和坐标系变换矩阵区别

目录 文章目录 目录摘要1.坐标变换矩阵与坐标系变换矩阵摘要 本节主要记录ardupilot 中坐标变换矩阵和坐标系变换矩阵的区别,这里非常重要,特别是进行姿态误差计算时,如果理解错误,很难搞明白后面算法。 1.坐标变换矩阵与坐标系变换矩阵 坐标变换矩阵的本质含义:是可以把…

webpack基础知识八:说说如何借助webpack来优化前端性能?

一、背景 随着前端的项目逐渐扩大&#xff0c;必然会带来的一个问题就是性能 尤其在大型复杂的项目中&#xff0c;前端业务可能因为一个小小的数据依赖&#xff0c;导致整个页面卡顿甚至奔溃 一般项目在完成后&#xff0c;会通过webpack进行打包&#xff0c;利用webpack对前…

Django实现音乐网站 ⑸

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是配置媒体资源设置。 目录 配置介绍 设置媒体资源 创建媒体资源目录 修改settings.py 注册媒体资源路由 总结 配置介绍 静态资源是指项目配置的js/css/image等系统常用文件。对于一些经常变动的资源&#x…

华为云交付

文章目录 一、华为云-公有云架构华为公有云的主要服务1.华为云服务—计算类2.华为云服务——存储类3.华为云服务—网络类4.华为云服务—管理和监督类5.华为云数据库 二、待续 一、华为云-公有云架构 华为公有云的主要服务 ECS&#xff1a;弹性云服务器&#xff08; Elastic Cl…

Node.js爬虫只会Cheerio?来试试Puppeteer!

简介 上篇文章我们学习了如何通过 Cheerio 来爬取静态页面&#xff0c;但是我们没有办法处理动态渲染页面的数据 关于 Cheerio 的学习请查看 都 2023 年了还不会 Node.js 爬虫&#xff1f;快学起来&#xff01; 今天我们学习如何使用 Puppeteer 来轻松地完成我们解决不了的爬虫…