Apache防盗链、网页压缩、网页缓存

news2024/9/19 10:59:30

目录

网页压缩

类型

示例

动态添加模块操作步骤

重装Apache操作步骤

网页缓存

示例

操作步骤

隐藏版本信息

操作步骤

Apache防盗链

定义

原理

配置防盗链实验环境

实验环境

本地图片盗链示例

操作步骤

防盗链示例

操作步骤


网页压缩

网站的访问速度是由多个因素所共同决定的,这些因素包括应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是 Apache本身的响应速度。可以使用网页压缩提升应用程序的速度。更重要的是,它完全不需要任何的成本,只不过是会让服务器 CPU 占用率稍微提升一两个百分点或者更少。

类型

  • gzip
    • 压缩效率高,对CPU占用较大
  • deflate
    • 压缩效率没有gzip高,对CPU占用小

示例

通过deflate模块实现网页压缩

在已经通过源码包安装过Apache的情况下,如果还保留着源码包,可以重新配置、编译、安装,重装Apache的操作不会影响以前的参数

或者在上一次安装时配置过动态加载模块的功能,就可以利用apxs的工具去不用重装动态添加模块

动态添加模块操作步骤

在不用重装Apache的情况下动态添加deflate模块

cd到Apache HTTP服务器用于存放与过滤器相关的模块代码

使用apxs工具进行操作

  • -i:安装模块。将编译后的模块安装到 Apache 服务器中。
  • -c:编译模块。将源代码文件(这里是mod_deflate.c)编译成共享对象文件(.so文件)。
  • -a:自动激活模块。编译并安装模块后,立即启用它,不需要手动编辑配置文件。

最后使用apachectl命令配合管道和grep查看是否成功加载了deflate模块

[root@localhost filters]# cd /root/httpd-2.4.25/modules/filters/
[root@localhost filters]# apxs -i -c -a mod_deflate.c
[root@localhost filters]# apachectl -t -D DUMP_MODULES | grep deflate
 deflate_module (shared)

在httpd的配置文件启用mod_deflate模块

[root@localhost filters]# vim /usr/local/httpd/conf/httpd.conf
在末行模式下搜索:/deflate
LoadModule deflate_module     modules/mod_deflate.so    # 去掉开头注释
<IfModule mod_deflate.c>
    # 对指定的类型应用deflat进行压缩(文本、样式表、图像)
    AddOutputFilterByType DEFLATE text/html text/css text/jpg text/png text/gif
    DeflateCompressionLevel 9    # 指定了压缩级别为9,表示最高级别的压缩(压缩比最高,但消耗CPU资源较多)
    SetOutputFilter DEFLATE    # 指定默认的输出过滤器为deflate进行输出内容的压缩
</IfModule>

重装Apache操作步骤

使用直接重装Apache的方式添加deflate模块

先使用apachectl -t -D DUMP_MODULES | grep deflate命令查看当前Apache有没有deflate模块

如果Apache是开启状态,要使用systemctl stop httpd关闭服务

进入源码包解压目录,指定安装目录,开启一些功能,网页压缩用到的就是deflate模块

./configure处理完后,使用make && make install命令编译并安装

[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[root@localhost httpd-2.4.25]# make && make install

使用ll命令查询deflate模块有没有被启用,可以看到mod_deflate.so文件是存在的

[root@localhost httpd-2.4.25]# ll /usr/local/httpd/modules/mod_deflate.so 
-rwxr-xr-x 1 root root 53096 7月  10 20:43 /usr/local/httpd/modules/mod_deflate.so

但是使用apachectl -t -D DUMP_MODULES | grep deflate命令就查询不到,那是因为在Apache的配置文件中并没有启用

编辑httpd的主配置文件,在大概143行左右,可以看到有很多LoadModule语句,我们就在这些LoadModule下面添加新的模块加载语句

在模块加载语句的第二部分,可以使用绝对路径也可以使用相对路径,因为在安装Apache时,通过./configure脚本定义了prefix(前缀)规则,所以在Apache的配置文件里想要指定某一个文件的路径,前缀路径可以省去

IfModule标签用于条件地加载模块配置,它的作用是检查当前的 Apache 环境中是否加载了指定的模块,只有当模块加载后,包裹在 IfModule 标签内的配置指令才会生效。

[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf

LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>    # 只有当 mod_deflate 模块加载时才会执行下面的配置
    DeflateCompressionLevel 6 # 压缩级别,数字越大压缩比就越大
    SetOutputFilter DEFLATE   # 启用deflate模块
    # 告诉服务器对哪些文件进行压缩,如果是已经压缩过的,就不再压缩
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/csstext/javascript application/x-javascript application/javascript application/json
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
    AddOutputFilterByType DEFLATE text/*
    AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
    AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
</IfModule>

保存并退出,可以使用httpd -t来检测配置文件中是否有语法错误,如果提示Syntax OK,说明没有错误

因为需要httpd重新加载修改后的配置文件,使新添加的配置生效,所以重启服务

此时在浏览器中访问Web服务器,按下键盘上的F12打开开发人员工具,选中Web服务器的ip地址,在响应标头中可以看到压缩技术是gzip

实验结束


网页缓存

网页缓存是将一部分经常不会改变和变动很少的页面缓存起来,下次浏览器再次访问这些页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。Apache的mod_expires模块会自动生成页面头部信息中的Expires标签和Cache-Control 标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。

示例

实现网页缓存

操作步骤

打开httpd主配置文件,开启expires模块并添加,重启服务

[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
在末行模式搜索:/expires_module
将前面的注释去掉,开启expires模块
LoadModule expires_module modules/mod_expires.so
<IfModule mod_expires.c>
    ExpiresActive On    # 开启缓存功能
    ExpiresDefault "access plus 60 seconds"    # 缓存时间设置为60秒
</IfModule>

检测语法正确性,重启服务
 [root@localhost httpd-2.4.25]# httpd -t
Syntax OK
[root@localhost httpd-2.4.25]# systemctl restart httpd

重启服务后,来到浏览器访问Web服务器,可以看到响应头的信息中多了两行信息


隐藏版本信息

软件的漏洞信息和特定版本是相关的,因此版本号对于攻击者来说是很有用的,在浏览器中的开发人员工具,响应标头中的server项,可以看到Apache的版本信息

如果网络攻击者得到Apache的版本信息,就会有针对性的进行攻击,给网站造成损失。所以在实际的生产环境中要隐藏Apache的版本号,减少攻击风险。

操作步骤

[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
在末行模式下搜索:/httpd-default
将Include语句前的注释去掉,表示包含Include语句后面指定的文件在当前文件中(相当于把指定文件的内容复制粘贴到当前文件的当前Include语句的位置)
# Various default settings
Include conf/extra/httpd-default.conf

保存并退出,打开httpd.default文件

[root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/extra/httpd-default.conf
在第55行就可以设置隐藏版本信息,这里改为Prod
ServerTokens Prod

可以看到注释里提供了选项:Set to one of: Full | OS | Minor | Minimal | Major | Prod

选项

说明

ServerTokens Full

返回最详细的服务器信息,包括操作系统类型和编译的模块列表。

例如:Apache/2.4.41 (Unix) OpenSSL/1.1.1d PHP/7.3.11

ServerTokens OS

只返回操作系统类型。

例如:Apache/2.4.41 (Unix)

ServerTokens Minor

返回主版本号和次版本号。

例如:Apache/2.4

ServerTokens Minimal

返回主版本号。

例如:Apache/2

ServerTokens Major

只返回主版本号。

例如:Apache/2

ServerTokens Prod

返回最少的信息,只显示 Apache,省略版本号。

例如:Apache

保存并退出,重启服务。访问Web服务器

可以看到版本信息只显示了一个Apache


Apache防盗链

Apache防盗链(Hotlinking)是一种保护措施,意思是阻止其他网站或未经授权的第三方直接链接到您网站上的图片、视频、音频或其他资源的行为。

当某个网站直接使用您网站上的资源时,他们实际上是在消耗您的带宽和服务器资源,而且可能未经您许可。

定义

  • 防盗链是指通过服务器配置,禁止外部网站或者未授权的第三方直接使用您网站上的资源链接。如果有人尝试在其网页中直接使用您的资源链接,访问者在该网页上就会看到无法加载资源的问题,或者显示代替内容。

原理

  • HTTP Referer检查:服务器通过检查HTTP请求中的Referer头部来判断资源请求的来源。如果发现Referer并不是您允许的来源(比如您自己的网站),服务器可以拒绝提供资源或者返回替代内容。
  • Rewrite规则:使用Apache的Rewrite规则可以重写请求,检查Referer头部,然后根据设置决定是提供资源还是拒绝请求。

配置防盗链实验环境

主机名

域名

IP地址

操作系统

主要软件及版本

apache1

www.e1.com

192.168.10.101

CentOS7.9

httpd-2.4.25.tar.gz

apache2

www.e2.com

192.168.10.201

CentOS7.9

httpd-2.4.25.tar.gz 或 yum安装

客户端

Windows 10

浏览器

实验环境

将第一台服务器直接克隆一个或者直接用yum -y install httpd安装httpd,并修改IP地址为192.168.10.102

修改两台服务器的主机名

101主机
[root@localhost ~]# hostname apache1
[root@localhost ~]# bash
[root@apache1 ~]#
201主机
[root@localhost ~]# hostname apache2
[root@localhost ~]# bash
[root@apache2 ~]#

修改两个Web服务器的hosts文件,使其都能解析对应域名

按照下方同样的步骤修改201主机

[root@apache1 ~]# vim /etc/hosts
在hosts文件末尾追加
192.168.10.101 www.e1.com
192.168.10.201 www.e2.com

对于Win10客户端主机的hosts文件,在C:\Windows\System32\drivers\etc下,双击hosts文件使用记事本打开

关闭两个Web服务器的防火墙和内核安全机制,开启httpd服务,在客户端主机试试能不能访问两个Web服务器

在两个Web服务器操作
[root@apache1 ~]# systemctl start httpd
[root@apache1 ~]# setenforce 0

本地图片盗链示例

101主机是我的站点,需要盗取201主机Web服务器上的图片

也就是www.e1.com盗取www.e2.com的图片链接

操作步骤

来到201主机

进入httpd存放网页文件的目录,拖入一张图片,编辑index.html文件,

[root@apache2 ~]# cd /usr/local/httpd/htdocs/
在该目录下从宿主机拖入一张图片
[root@apache2 htdocs]# vim index.html
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>标题</title>
</head>
<body>
    <h1>原图网站</h1>
    <img src="logo.jpg" />    # 如果图片文件是在网页文件同一目录下,可以不用加路径
</body>
</html>

保存并退出,此时在宿主机使用浏览器访问www.e2.com可以看到网页中有了图片

如果要盗取其他网站的图片,需要有该图片的链接,在浏览器中右键图片,选择复制图像连接

来到101主机

在101Web服务器的首页上添加图片的链接

[root@apache1 ~]# cd /var/www/html    # 使用yum安装httpd的存放网页文件的目录
[root@apache1 html]# vim index.html
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>标题</title>
</head>
<body>
    <h1>盗图网站</h1>
    <img src="http://www.e2.com/logo.jpg" />
</body>
</html>

保存并退出,来到客户端Win10主机访问两个网址www.e1.com和www.e2.com

使用F12打开开发人员工具,在网络中可以看到www.e2.com的请求URL和图片链接都是www.e2.com自己的

而www.e1.com的请求URL是www.e1.com,但图片请求是www.e2.com主机的IP + 图片链接

至此就实现了简单本地图片盗链

防盗链示例

如果有其他主机盗取201主机的图片链接,就只显示固定的图片,而不是对方想要盗用的图片

操作步骤

在提供原图的201主机(www.e2.com)的htdocs目录下再导入一张图片(error.jpg),用于防盗链实验

然后编辑httpd的配置文件,启用rewrite模块(地址重写),rewrite的目的是如果有人请求我的logo.jpg,就把请求重定向给error.jpg

有了地址重写的功能,就可以对请求进行审核判断,如果请求是www.e2.com作为前缀的,就允许访问,如果请求的前缀不是www.e2.com,就不允许访问该图片

[root@apache2 htdocs]# vim /usr/local/httpd/conf/httpd.conf
在末行模式下搜索:/rewrite
LoadModule rewrite_module modules/mod_rewrite.so # 将开头注释去掉,启用rewrite模块

在末行模式下搜索:/htdocs
在<Directory "/usr/local/httpd/htdocs">标签内往下翻
找到AllowOverride参数的行,修改内容为下方内容
    AllowOverride None
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://e2.com$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://e2.com/.*$ [NC]
    

    RewriteCond %{HTTP_REFERER} !^http://www.e2.com$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.e2.com/.*$ [NC]
    RewriteRule .*\.(gif|jpg|swf)$ http://www.e2.com/error.png

参数

说明

AllowOverride ALL

允许在 .htaccess 文件中使用 RewriteEngine 和其他重写规则。

ALL:允许所有类型的重写指令被 .htaccess 文件中的规则覆盖。

None:禁止在该目录中使用 .htaccess 文件来覆盖服务器配置

RewriteEngine On

启用重写功能,这是开启重写规则的第一步

RewriteCond

定义重写条件

%{HTTP_REFERER}

是Apache内置的一个变量,该变量可以获取到用户访问时请求报文头部信息里的URL

匹配请求中的 Referer 值

!^http://www.e2.com/.*$

该URL下的任意一个文件(.*:匹配单个或多个任意字符)

表示不匹配以 http://www.e2.com/ 开头的字符串并以任意单个或多个字符结尾

[NC]

过滤时不区分大小写

RewriteRule

定义重写规则

.*\.(gif|jpg|swf)$ http://www.e2.com/error.png

当前面的重写条件匹配时,如果请求的 URL 以 .gif、.jpg 或 .swf 结尾

则将请求重定向到 http://www.e2.com/error.png

.*:匹配任意数量的任意字符

\.:被转义符转义的点,这里就是单纯的点的意思

保存并退出,重启服务。

最后来到客户端主机(Win10)测试,避免图片被浏览器缓存,所以使用Ctrl + Shift + Delete快捷键清理浏览器缓存

然后访问www.e2.com,一切正常

访问www.e1.com,盗取的图片链接变成了重定向的error.png图片

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

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

相关文章

C语言 结构体和共用体——对结构体的操作

目录 如何访问结构体的成员&#xff1f; 结构体变量的赋值操作 结构体变量的取地址值操作 如何访问结构体的成员&#xff1f; 结构体变量的赋值操作 结构体变量的取地址值操作

C++基础技能:如何在VisualStudio中使用clang-format格式化代码

目录 1.下载 clang-format.exe程序 2.clang-format详细参数说明 3.Visual Studio中设置使用clang-format 4.创建.clang-format文件 5.在Visual Studio中触发格式化 1.下载 clang-format.exe程序 下载源&#xff1a; https://llvm.org/builds/下载最新的clang-format。ht…

开发编码规范笔记

前言 &#xff08;1&#xff09;该博客仅用于个人笔记 格式转换 &#xff08;1&#xff09;查看是 LF 行尾还是CRLF 行尾。 # 单个文件&#xff0c;\n 表示 LF 行尾。\r\n 表示 CRLF 行尾。 hexdump -c <yourfile> # 单个文件&#xff0c;$ 表示 LF 行尾。^M$ 表示 CRLF …

晨持绪电商:开一家抖音网店到底有前景吗

在数字化浪潮汹涌的今天&#xff0c;抖音作为一颗耀眼的新星&#xff0c;不仅重塑了人们的娱乐方式&#xff0c;更是成为电商领域的新战场。但许多人仍在观望&#xff0c;心中充满疑问&#xff1a;开一家抖音网店&#xff0c;究竟有没有前景? 抖音的流量优势不容忽视。凭借数亿…

CVE-2024-23692: Rejetto HTTP File Server 2.3m Unauthenticated RCE漏洞复现

目录 本文章仅供学习使用&#xff01;&#xff01;&#xff01; Rejetto HTTP介绍 漏洞简介 漏洞环境 漏洞复现 exp 复现 结果 如何修复 本文章仅供学习使用&#xff01;&#xff01;&#xff01; Rejetto HTTP介绍 Rejetto是一个流行的开源软件项目&#xff0c;主要…

【RHCE】dns实验0709

题目&#xff1a; 配置主服务器的web内容 web部分 创建web页面 修改增加etc/hosts内容且重启 测试&#xff1b; dns 区域文件 防火墙放行&#xff1a; 主服务器测试从服务器 从服务器 web dns 防火墙放行服务 selinux放行&#xff1a; 创建文件 定义特定文件 测试&#xff1…

ROS基础学习-ROS运行管理

ROS运行管理 目录 1. ROS运行管理简述2. ROS元功能包2.1 概念2.2 作用2.3 实现 3. ROS-launch文件3.1. ROS节点管理launch文件3.1.1 概念3.1.2 作用3.1.3 使用 3.2 launch文件标签 1. ROS运行管理简述 ROS是多进程(节点)的分布式框架&#xff0c;一个完整的ROS系统实现&#x…

城市窨井盖监测设备:让城市井盖不再“蹦迪”

近日&#xff0c;郑州暴雨来袭&#xff0c;街道瞬间变成河流&#xff0c;而原本默默无闻的井盖却成了“网红”&#xff0c;由于暴雨强大的水流压力&#xff0c;使它们在水中“随波逐流”上下跳动&#xff0c;网友直呼&#xff1a;这年头井盖都会“蹦迪”了。虽然是一句调侃&…

教你怎么不开DLSS3.0也能有效提高永劫无间帧数

永劫无间&#xff0c;一款国风的多人对战竞技游戏&#xff0c;游戏画面特别精美&#xff0c;在游戏中给玩家强烈的打击感&#xff0c;玩家在游玩过程中仿佛置身于游戏&#xff0c;而且此游戏非常受玩家欢迎。游戏中可以进行三人、双人、单人进行游玩&#xff0c;我们需要选择出…

前端必修技能:高手进阶核心知识分享 - 三万字详解CSS动画效果

在CSS的世界里,存在着多种能体现动画效果的属性:CSS transform、CSS Transition 和 CSS Animation。让开始接触CSS的同学感到困惑。要搞清楚CSS的动画,我们就必须先把这几种属性做一下区别。 CSS transform 属性、CSS Transition 属性、 CSS Animation 属性的区别 CSS tra…

地理信息科学在灾害管理中的应用:GIS构建防灾减灾的智慧防线

在全球气候变化与人类活动加剧的背景下&#xff0c;自然灾害频发&#xff0c;给社会经济发展带来了严峻挑战。本文将深入分析GIS在灾害预测、评估和响应中的核心作用&#xff0c;展示其如何为构建更加安全、韧性的社会提供智慧解决方案。 灾害预测&#xff1a;GIS的“先知”之…

【学习css2】grid布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

YOLOv8改进 | 注意力机制| 对小目标友好的BiFormer【CVPR2023】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

前端一面之 同步 vs 异步

异步 vs 同步 先看一下 下面的 demo console.log(100) setTimeout(function () {console.log(200) }, 1000) console.log(300) 执行结果 100 300 200console.log(100) alert(200) // 1秒钟之后点击确认 console.log(300) 这俩到底有何区别&#xff1f;—— 第一个示例中间的…

5,智能合约(react+区块链实战)

5&#xff0c;智能合约&#xff08;react区块链实战&#xff09; 5-1 智能合约5-2 metamask安装及私有链搭建互相联动5-3 solidity数据类型-布尔-数字-地址&#xff08;owner区别&#xff09;5-4 solidity 数组和映射&#xff08;代币转账&#xff09;5-5 solidity结构体与枚举…

强制升级最新系统,微软全面淘汰Win10和部分11用户

说出来可能不信&#xff0c;距离 Windows 11 正式发布已过去整整三年时间&#xff0c;按理说现在怎么也得人均 Win 11 水平了吧&#xff1f; 然而事实却是&#xff0c;三年时间过去 Win 11 占有率仅仅突破到 29%&#xff0c;也就跳起来摸 Win 10 屁股的程度。 2024 年 6 月 Wi…

【测试文档】系统测试报告(Word原件2024)

软件测试报告在软件开发过程中起着至关重要的作用&#xff0c;主要有以下几个主要原因&#xff1a; 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…

【redis缓存】怎么使用 Redis 实现一个延时队列?

redis实现延时队列 1 回答2 代码实现2.1 利用 Redis 过期消息实现延时队列2.1.1 配置键空间通知2.1.2 应用程序订阅过期事件 2.2 使用 Sorted Set 实现延时队列2.2.1 实现思路2.2.2 详细步骤 2.3 Redisson 实现延迟队列2.3.1 添加Redisson依赖2.3.2 任务生产者类 TaskProducer2…

一文入门【NestJs】Providers

Nest学习系列 ✈️一文入门【NestJS】 ✈️一文入门【NestJs】Controllers 控制器 &#x1f6a9; 前言 在NestJS的世界里&#xff0c;理解“Providers”是构建健壮、可维护的后端服务的关键。NestJS&#xff0c;作为Node.js的一个现代框架&#xff0c;采用了Angular的一些核…

轻松搭建系统,让每个故事都精彩绽放!

"轻松搭建系统&#xff0c;让每个故事都精彩绽放&#xff01;" 这句话传递了一个核心理念&#xff0c;即通过简化、高效的系统搭建过程&#xff0c;让每一个创意故事都能以最佳状态呈现给观众&#xff0c;实现其独特魅力和价值的最大化。 1、模块化设计&#xff1a;系…