小阿轩yx-Apache 网页优化

news2024/11/25 0:29:47

小阿轩yx-Apache 网页优化

网页压缩与缓存

对Apache服务器优化配置

  • 能让 Apache 发挥出更好的性能

相反,配置糟糕

  • Apache可能无法正常服务

网页压缩

网站的访问速度是由多个因素所共同决定的

包括应用程序

  • 响应速度
  • 网络带宽
  • 服务器性能
  • 与客户端之间的网络传输速度等等

(注:其中最重要的一个因素是 Apache本身的响应速度)

网站性能需要着手进行处理

  • 尽可能的提升 Apache 的执行速度
  • 可以使用网页压缩提升应用程序的速度

更重要的好处

  • 它完全不需要任何的成本

(注:只不过是会让服务器 CPU 占用率稍微提升一两个百分点或者更少)

gzip 介绍
  • 是一种流行的文件压缩算法
  • 目前应用非常广泛,尤其是在 Linux 平台

好处

  • 大约可以减少 70%以上的文件大小
  • 经过压缩后,实际上降低了网络传输的字节数

(注:最明显的好处就是可以加快网页加载的速度)

网页加载速度加快的好处

  • 节省流量
  • 改善用户的浏览体验外
  • 另一个潜在的好处是 gzip 与搜索引擎的抓取工具有着更好的关系
HTTP 压缩的过程

Web 服务器接收到浏览器的 HTTP 请求后,检查浏览器是否支持 HTTP 压缩(Accept-Encoding 信息)。

  • 如果浏览器支持 HTTP 压缩,Web 服务器检查请求文件的后缀名。
  • 如果请求文件是 HTML、CSS 等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件。
  • 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件。
  • 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件。
  • 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
Apache 的压缩模块

Apache 1.x系列

  • 没有内建网页压缩技术
  • 使用的是额外的第三方 mod gzip 模块来执行压缩

Apache 2.x

  • 官方在开发的时候,就把网页压缩考虑进去
  • 内建了 mod deflate 这个模块,用以取代 mod_gzip

(注:两者都是使用的 gzip 压缩算法,它们的运作原理是类似的

区别
  • mod deflate 压缩速度略快
  • mod gzip 的压缩比略高

一般默认情况下

  • mod_gzip会比 mod deflate 多出 4%~6%的压缩量

一般来说

  • mod_gzip 对服务器 CPU 的占用要高一些
  • mod deflate 是专门为确保服务器的性能而使用的一个压缩模块
  • mod deflate 需要较少的资源来压缩文件

高流量的服务器

  • 使用 mod deflate 可能会比 mod_gzip 加载速度更快

简而言之

  • 如果网站访问量较小,想要加快网页的加载速度,就使用mod_gzip。虽然会额外耗费一些服务器资源,但也是值得的。
  • 如果网站访问量较大,并且使用的是共享的虚拟主机,所分配系统资源有限的话,使用mod_deflate 将会是更好的选择。

Apache 2.4.25 版本中 mod deflate 模块

可使用 DeflateCompressionLevel 指令设置压缩级别

  • 该指令的值可为1(压缩速度最快,最低的压缩质量)至9(最慢的压缩速度,压缩率最高)之间的整数
  • 其默认值为6(压缩速度和压缩质量较为平衡的值)
  • 这个简单的变化更是使得 mod_deflate 可以轻松媲美 mod_gzip 的压缩
mod_deflate 模块

检查是否安装 mod_deflate 模块

[root@www ~]# apachectl -t -D DUMP_MODULES

安装时启用此功能

# 安装时编译 Apache 添加 mod_deflate 模块
[root@apache ~]# tar zxf httpd-2.4.25.tar.gz
[root@apache ~]# cd httpd-2.4.25/ 
[root@apache ttpd-2.4.25]#./configure \
--prefix=/usr/local/httpd \
--enable-so --enable-rewrite \
--enable-charset-lite \
--enable-cgi --enable-deflate
[root@apache httpd-2.4.25]#make && make install 
[root@apache httpd-2.4.25]#ln -s /usr/local/httpd/bin/* /usr/local/bin

配置 mod_deflate 模块启用 

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

LoadModule deflate_module modules/mod_deflate.so

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>

检查安装情况

[root@apache~# apachectl -t
Syntax OK
[root@apache~l# apachectl restart
[root@apache ~]# apachectl -t -D DUMP MODULES | grep "deflate"deflate module (shared)

 测试 mod_deflate 压缩模块是否生效 

http://192.168.10.101/test1.php

(注意:查看前面测试php的页面按F12可以打开)

网页缓存

  • 将一部分经常不会改变和变动很少的页面缓存
  • 下次浏览器再次访问这些页面时
  • 不需要再次去下载这些页面,从而提高了用户的访问速度

Apache 的 mod expires 模块会自动生成页面头部信息中

  • Expires 标签
  • Cache-Control标签

客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求

从而降低客户端的访问频率和次数

达到减少不必要的流量和增加访问速度的目的

(注:配置 mod expires 模块的步骤与 mod deflate 模块相似)

配置 mod_expires 模块启用

[root@apache~]# vim /usr/local/httpd/conf/httpd.conf

##去掉前面的注释
LoadModule expires_module modules/mod_expires.so

<IfModule mod_expires.c>
ExpiresActive On 
ExpiresDefault "access plus 60 seconds"
</IfModule>

(注:ExpiresActive On:打开网页缓存功能

ExpiresDefault "access plus 60 seconds" :设置缓存60秒)

检测 httpd.conf 语法

[root@www ~]# apachectl -t

重启 Apache 服务

[root@www ~]# apachectl restart

测试mod_expires 模块,访问网站

http://192.168.10.101/test1.php

(注:查看前面测试php的页面)

隐藏版本信息

软件漏洞信息和特定版本是相关的。软件版本号对攻击者是很有价值的

修改主配置文件

[root@www ~]# vim /usr/local/httpd/conf/httpd.conf
# 去掉前面的注释符
Include conf/extra/httpd-default.conf

修改httpd-default.conf文件

[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf

ServerTokens Prod

重启并测试

# 查看响应头,Server字段只显示Apache,不再显示版本信息
[root@www ~]# apachectl restart

Apache 防盗链

没有任何资源的网站利用了其他网站的资源来展示给浏览者

好处

  • 提高了自己的访问量
  • 而大部分浏览者又不会很容易地发现

一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接

  • 一方面损害了原网站的合法利益
  • 另一方面又加重了服务器的负担

HTTP 标准协议中有专门的 Referer 字段记录,它的作用如下

  • 可以追溯上一个入站地址是什么。
  • 对于资源文件,可以跟踪到包含显示它的网页地址是什么,因此所有防盗链方法都是基于这个 Referer 字段。

配置防盗链

实验环境

将第一台服务器直接克隆一个,并修改IP地址为192.168.10.201

修改两台服务器的主机名

服务器1

[root@www ~]# hostnamectl set-hostname apache1
[root@www ~]# bash

服务器2

[root@www ~]# hostnamectl set-hostname apache2
[root@www ~]# bash

修改每个主机的hosts文件

192.168.10.101 www.benet.com
192.168.10.102 www.accp.com

编写带有图片的网页(原图网站)

将图片文logo.jpg件拷贝到apache的网站根目录下并修改网页文件

[root@apache1 ~]# vim /usr/local/httpd/htdocs/index.html
<html>
<body>
<h1>It work! </h1>
<img src="logo.jpg"/>
</body>
</html>

用另一台apache服务器盗链(盗图网站)

www.accp.com 服务器,修改 index.html 文件,加入盗取图片链接

[root@apache2 ~]# vim /usr/local/httpd/htdocs/index.html 
<html>
<body>
<h1>dao lian </h1>
<img src="http://www.benet.com/logo.jpg" />
</body>
</html>

客户端测试访问,按F12查看

鼠标右键点选图片,选择“查看图像信息”,可以看到图片的网址是www.kxr.com/logo.jpg 

模拟盗取图片链接 

修改index.html文件加入盗图链接

[root@apache2 htdocs]# vim index.html
<html><body><h1>lt daotu
//盗取链接图片
<img src="http://www.kxr.com/ogo.jpg" />
</h1></body></html>

鼠标右键点选图片,选择“查看图像信息”,可以看到图片的网址是www.kxr.com/logo.jpg 

 在火狐浏览器右键选择“査看元素"可以看到先对 www.dt.com 请求,然后对 www.kxr.com/logo.jp请求,说明盗链成功

为Apache1 防盗链设置

配置 mod_rewrite 模块启用

[root@apache1 ~]# vim /usr/local/httpd/conf/httpd.conf

#去掉前面的注释
LoadModule rewrite_module modules/mod_rewrite.so		

#修改此网站访问参数
<Directory "/usr/local/httpd/htdocs">

AllowOverride None

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/error.png
Require all granted
</Directory>

检测 httpd.conf 语法 

[root@apache conf ~]# apache -t

重启服务 

[root@apache1 ~]# systemctl restart httpd

(注:AllowOverride ALL)

 mod rewrite 模块主要的功能

  • 实现 URL 的跳转
  • 它的正则表达式是基于 Per语言

可基于的两种方式

  • 服务器级(httpd.conf)
  • 目录级的(.htaccess)

基于服务器级的(httpd.conf)有两种方法

  • 一种是在 httpd.conf的全局下直接利用RewriteEngine on 来打开 rewrite 功能
  • 另一种是在局部里利用 RewriteEngine on 来打开rewrite 功能

基于目录级的(.htaccess)

  • 要注意一点就是必须打开此目录的 FollowSymLinks 属性且在.htaccess 里要声明 RewriteEngine on。

开启rewrite 功能后

  • 需要设置 RewriteCond 指令

它定义了匹配规则

  • 如果符合某个或某几个条件,则执行 RewriteCond 下面紧邻的 RewriteRule 指令。
  • 如果不匹配,则后面的规则不再匹配,RewriteRule 则定义需要重定向到的路径。

RewriteEngine On打开了重写引擎

根据匹配规则分析“RewriteCond %{HTTP REFERER} !^http://www.kxr.com/.*$ [NC]”含义

  • “%{HTTP REFERER}”:表示从哪个 URL 来产生请求。
  • “!^”: 表示不是以后面的字符串开头。
  • “http:/www.kxr.com”,是本网站的路径,按整个字符串匹配。
  • “.*$ ”表示以任意字符结尾。
  • “NC"表示不区分大小写字母。

(注:最后的规则是不以“htp://www.kxr.com”为路径,即不是本网站进行访问,后面是任意字符都可以匹配成功)

如果请求路径被匹配,执行重定

“RewriteRule .*.(gifljpglswf)$ http://www.kxr.com/error.png”

(注:RewriteRule中不要添加png的格式,否则客户端看不到error图片)

  • “."表示匹配一个字符。
  • “*”表示匹配0到多个字符,与".”合起来的意思是匹配1到多个字符,实际上可以只用“+“表示,这里是为了演示使用方式。
  • “."在这里表示的是转义字符“”,因为"."在指令中是属于规则字符,有相应的含义如果需要匹配,需要在前面加个“”其它规则字符如果需要匹配,也做同样处理。
  • “(gifljpg|swf)”表示匹配“gif”、"jpg”、“sw"任意一个,“$”表示结束。最后的规则是以“.gif”、“jpg”、“.swf结尾,前面是1到多个字符的字符串,也就是匹配图片类型的文件。
  • “http:/kwww.kxr.com/error.png”:表示转发到这个路径

(注:整个配置的含义是本网站以外的站点访问本站的图片文件时,显示 error.png 这个图片) 

检测 httpd.conf 语法

[root@apache1 ~]# apachectl -t

复制 error.png 这个图片到benet站点的工作目录 /usr/local/httpd/htdocs,再次访问网站 

可以看到防盗链图片已经工作,其它网站盗链,返回给它禁止盗链的图片。使用火狐浏览器可以看到 logo.jpg 的 htp 状态码是 302,它表示重定向,再次说明防盗链配置成功。 

 小阿轩yx-Apache 网页优化

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

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

相关文章

通过语言大模型来学习LLM和LMM(四)

一、大模型学习 新的东西&#xff0c;学习的东西就是多&#xff0c;而且最简单最基础的都需要学习&#xff0c;仿佛一点基础知识都要细嚼慢咽&#xff0c;刨根问底&#xff0c;再加上一顿云里雾里的吹嘘&#xff0c;迷迷糊糊的感觉高大上。其实就是那么一回事。再过一段时日&a…

ASP.NET MVC企业级程序设计(增非空,日期转换,修改)

目录 题目&#xff1a; 实现过程 控制器代码 DAL BLL Index ADD 题目&#xff1a; 实现过程 控制器代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcApplication1.Models; namespace …

FLAN-T5模型的文本摘要任务

Text Summarization with FLAN-T5 — ROCm Blogs (amd.com) 在这篇博客中&#xff0c;我们展示了如何使用HuggingFace在AMD GPU ROCm系统上对语言模型FLAN-T5进行微调&#xff0c;以执行文本摘要任务。 介绍 FLAN-T5是谷歌发布的一个开源大型语言模型&#xff0c;相较于之前的…

企业化运维(3)_PHP、nginx结合php-fpm、memcache、openresty、goaccess日志可视化

###1.PHP源码编译### 解压PHP压缩包&#xff0c;切入PHP目录&#xff0c;进行configure-->make-->make installd三部曲 [rootserver1 ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel ##依赖性 [rootserver1 ~]# yum…

基于Nios-II实现流水灯

基于Nios-II实现流水灯的主要原理 涉及到FPGA&#xff08;现场可编程门阵列&#xff09;上的嵌入式软核处理器Nios II与LED控制逻辑的结合。以下是详细的实现原理&#xff0c;分点表示并归纳&#xff1a; Nios II软核处理器介绍&#xff1a; Nios II是Altera公司推出的一种应用…

Camtasia2024破解永久激活码注册码分享最新

随着数字时代的到来&#xff0c;视频制作已成为许多人日常生活和工作中不可或缺的一部分。而在众多视频编辑软件中&#xff0c;Camtasia凭借其强大的功能和易用性&#xff0c;赢得了广泛的用户喜爱。近期&#xff0c;Camtasia 2024的破解版本在网络上引起了广泛关注。本文旨在为…

外链建设如何进行?

理解dofollow和nofollow链接&#xff0c;所谓dofollow链接&#xff0c;就是可以传递权重到你的网站的链接&#xff0c;这种链接对你的网站排名非常有帮助&#xff0c;这种链接可以推动你的网站在搜索结果中的位置向上爬&#xff0c;但一个网站全是这种有用的链接&#xff0c;反…

scrapy爬取豆瓣书单存入MongoDB数据库

scrapy爬取豆瓣书单存入MongoDB数据库 一、安装scrapy库二、创建scrapy项目三、创建爬虫四、修改settings,设置UA,开启管道五、使用xpath解析数据六、完善items.py七、在douban.py中导入DoubanshudanItem类八、爬取所有页面数据九、管道中存入数据,保存至csv文件十、将数据写…

解决javadoc一直找不到路径的问题

解决javadoc一直找不到路径的问题 出现以上问题就是我们在下载jdk的时候一些运行程序安装在C:\Program Files\Common Files\Oracle\Java\javapath下&#xff1a; 一开始是没有javadoc.exe文件的&#xff0c;我们只需要从jdk的bin目录下找到复制到这个里面&#xff0c;就可以使用…

玄机平台应急响应—MySQL应急

前言 这个是比较简单的&#xff0c;其实和MySQL没啥太大的关系&#xff0c;没涉及太多MySQL的知识。看一下它的flag要求吧。 flag1 它说黑客写入的shell&#xff0c;那我们就去它的网站目录去看看&#xff0c;果然有一个叫sh.php的文件。 flag1{ccfda79e-7aa1-4275-bc26-a61…

excel中按多列进行匹配并对数量进行累加

公司的生产计划是按订单下发&#xff0c;但不同订单的不同产品中可能有用到相同的配件&#xff0c;按单1对1时&#xff0c;对计算机十分友好&#xff0c;但对于在配件库检料的工人来说就比较麻烦&#xff0c;上百条产品里可能会有多条都是相同的产品&#xff0c;首先考虑的办法…

Android采用Scroller实现底部二楼效果

需求 在移动应用开发中&#xff0c;有时我们希望实现一种特殊的布局效果&#xff0c;即“底部二楼”效果。这个效果类似于在列表底部拖动时出现额外的内容区域&#xff0c;用户可以继续向上拖动查看更多内容。这种效果可以用于展示广告、推荐内容或其他信息。 效果 实现后的…

回答网友的一个Delphi问题

网友想在grid 中 加一个水印&#xff0c;俺就给他写了个例子。先靠效果&#xff1a; 这个例子 包含下面几步&#xff1a; 1、创建背景 dg_bmp:Tbitmap.Create; w: Image1.Picture.Bitmap.width; h: Image1.Picture.Bitmap.height; dg_bmp.width: w*2; dg_bmp.height: …

[渗透测试学习] Runner-HackTheBox

Runner-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -v 10.10.11.13扫描结果如下 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.18.0 (Ubuntu) 8000…

算法day32

第一题 207. 课程表 步骤一&#xff1a; 通过下图的课程数组,首先画出DAG图&#xff08;有向无环图&#xff09; 步骤二&#xff1a; 其次我们按照DAG图&#xff0c;来构建该图的拓扑排序&#xff0c;等有效的点都按照规则排完序后&#xff0c;观察是否有剩下的点的入度不为0&…

基于VSCode和MinGW-w64搭建LVGL模拟开发环境

目录 概述 1 运行环境 1.1 版本信息 1.2 软件安装 1.2.1 下载安装VS Code 1.2.1.1 下载软件 1.2.1.1 安装软件 1.2.2 下载安装MinGW-w64 1.2.2.1 下载软件 1.2.2.2 安装软件 1.2.3 下载安装SDL 1.2.3.1 下载软件 ​1.2.3.2 安装软件 1.2.4 下载安装CMake 1.2.4.…

微服务链路追踪ELK

微服务链路追踪&ELK 链路追踪概述链路追踪sluthzipkinelk日志管理平台 一 链路追踪 1 概述 1.1 为什么需要链路追踪 ​ 微服务架构是一个分布式架构&#xff0c;它按业务划分服务单元&#xff0c;一个分布式系统往往有很多个服务单元。由于服务单元数量众多&#xff0…

紫光展锐5G处理器T750__国产手机芯片5G方案

展锐T750核心板采用6nm EUV制程工艺&#xff0c;CPU架构采用了八核设计&#xff0c;其中包括两个主频为2.0GHz的Arm Cortex-A76性能核心和六个主频为1.8GHz的A55小核。这种组合使得T750具备卓越的处理能力&#xff0c;并能在节能的同时提供出色的性能表现。该核心模块还搭载了M…

Kafka 如何保证消息顺序及其实现示例

Kafka 如何保证消息顺序及其实现示例 Kafka 保证消息顺序的机制主要依赖于分区&#xff08;Partition&#xff09;的概念。在 Kafka 中&#xff0c;消息的顺序保证是以分区为单位的。下面是 Kafka 如何保证消息顺序的详细解释&#xff1a; ⭕分区内消息顺序 顺序写入&#…