小阿轩yx-Apache 网页优化

2024-06-15 17:28

本文主要是介绍小阿轩yx-Apache 网页优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小阿轩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.confLoadModule 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.confServerTokens 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 NoneRewriteEngine 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 网页优化

这篇关于小阿轩yx-Apache 网页优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064104

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、