Apache网页优化

一、网页压缩与缓存

1.1网页压缩

        网站访问速度影响因素:应用程序响应速度、网络带宽、服务器性能、与客户端之间网络传输速度等。其中最重要的是=一个因素是Apache本身,因此提升Apache执行速度(使用网页压缩)是性价比最高的选择。

1.gzip介绍

        一种流行的文件压缩算法,大约可以减少70%以上的文件大小。利用Apache的gzip模块可使用该算法对网页内容进行压缩后再传输给客户端浏览器,从而加快网页加载速度

2.HTTP压缩过程

①服务器接收到HTTP请求后,先检查浏览器是否支持压缩(Accept-Encoding信息)
②如果支持,服务器将检查请求文件的后缀,如HTML,CSS等静态文件,服务器会在压缩缓存目录中查找是否存在最新的压缩文件
③如果不存在最新压缩文件,服务器会返回未压缩的请求文件,并在缓存目录中存放该请求的压缩文件
④如果存在新压缩文件,则直接返回请求的压缩文件
⑤如果请求是动态文件,则服务器会动态压缩内容并返回浏览器,但内容不会存放到缓存目录中

3.Apache的压缩模块

①Apache 1.x系列没有内江网页压缩技术,使用的是第三方mod_gzip模块进行压缩
②2.x系列内建了mod_deflate模块来取代mod_gzip
③mod_gzip对服务器cpu占用更高,但压缩效率更高

4.mod_deflate 模块

检查是否安装有mod_deflate模块

[root@www ~]# apachectl -t -D DUMP_MODULES | grep deflate
(1)安装时启用此功能

安装时编译 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
[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>
(2)利用apxs为http扩展此功能

如果有apache的源码,可以重新编译并安装一次,新的模块就会添加进去,如果没有源码,或不想重新编译,可以使用apxs扩展此模块,方法如下

[root@www ~]# yum -y install zlib-devel
[root@www ~]# cd httpd-2.4.25/modules/filters/
[root@www filters]# /usr/local/httpd/bin/apxs -i -c -a mod_deflate.c 
备注:
-i 安装
-c 编译指定模块 
-a激活模块
(3)配置 mod_deflate 模块启用
[root@apache~]# vim /usr/local/httpd/conf/httpd.conf
添加以下内容:LoadFile /usr/lib64/libz.so
LoadModule deflate_module     modules/mod_deflate.so<IfModule mod_deflate.c> 
DeflateCompressionLevel 6 
SetOutputFilter 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>

备注:

DeflateCompressionLevel 9 #代表压缩级别,范围为1~9

SetOutputFilter DEFLATE #代表启用deflate 模块对本站点的输出进行gzip压缩

备注:

可简化为如下代码:

LoadFile /usr/lib64/libz.so

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@www httpd-2.4.25]# httpd -t
[root@www httpd-2.4.25]# apachectl restart
[root@localhost httpd-2.4.25]#  apachectl -t -D DUMP_MODULES | grep deflatedeflate_module (shared)
(4)测试 mod_deflate 压缩模块是否生效

访问网站:

http://192.168.10.101/test1.php

注意:查看前面测试php的页面

按F12可以打开,

1.2网页缓存

1.配置 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秒

2.检测 httpd.conf 语法

[root@www ~]# apachectl -t

3.重启 Apache 服务

[root@www ~]# apachectl restart

4.测试mod_expires 模块

访问网站:

http://192.168.10.101/test1.php

注意:查看前面测试php的页面

二、隐藏版本信息

1.修改主配置文件

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

2.修改httpd-default.conf文件

[root@www ~]# vim /usr/local/httpd/conf/extra/httpd-default.confServerTokens Prod备注:
ServerTokens字段代表显示格式,各种格式如下:
Prod    Server:Apache 
Major   Server:Apache/2 
Minor   Server:Apache/2.4 
OS     Server: Apache/2.4.25 (Unix) 
Full     Server: Apache/2.4.25 (Unix) PHP/4.2.2 MyMod/1.2

3.重启并测试

[root@www ~]# apachectl restart

查看响应头,Server字段只显示Apache,不再显示版本信息

三、防盗链

3.1配置防盗链

1.实验环境

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

3.修改两台服务器的主机名

(1)服务器1
[root@www ~]# hostnamectl set-hostname apache1
[root@www ~]# bash
(2)服务器2
[root@www ~]# hostnamectl set-hostname apache2
[root@www ~]# bash

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

将图片文logo.jpg件拷贝到apache的网站根目录下并修改网页文件
[root@apache1 ~]# vim /usr/local/httpd/htdocs/index.html
<html>
<body>
<h1>It work! </h1>
<img src="logo.jpg"/>
</body>
</html>

5.用另一台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>

6.客户端测试访问

按F12查看

3.2Apache1 防盗链设置

1)配置 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>[root@apache1 ~]# systemctl restart httpd

备注:

AllowOverride ALL

通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里,这时就需要将AllowOverride 的参数设置为ALL。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override。如果AllowOverride 的参数设置为None,需要将rewrite规则直接写在httpd的主配置文件中。

RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.$ [NC] 的字段含义:

  • “%{HTTP REFERER}”:存放一个链接的URL,表示从哪个链接访问所需的网页。
  • “!^”: 表示不以后面的字符串开头。
  • “ http://www.benet.com” : 是本网站的路径,按整个字符串匹配。
  • “.*$” : 表示以任意字符结尾。
  • “[NC]”: 表示不区分大小写字母。

RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/error.png的字段含义:

  • “.”: 表示匹配一个字符。
  • “*”:表示匹配0 到多个字符,与“.”合起来的意思是匹配0到多次前面的任意字符,如果是1到多次匹配可以用“+”表示。
  • “\.”: 在这里的“\“是转义符,”." 就代表符号“.”的意思。因为“. ”在指令中是属于规则字符,有相应的含义,如果需要匹配,需要在前而加个转义符"\”,其它规则字符如果需要匹配,也做同样处理。
  • “(gif|jpg|swf)”: 表示匹配“gif”、“jpg”、“swf"任意一个, “$”表示结束。最后的规则是以“.gif”、 “.jpg”、 ".swf”结尾。

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

2)检测 httpd.conf 语法
[root@apache1 ~]# apachectl -t

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua实现自定义函数面向对象编程

本文目录 1、引言2、原理3、实例4、层析验证 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在现代软件开发中&#xff0c;面向对象编程&#xff08;OOP&#xff09;已经成为一种广泛使用的编程范式…

python数据分析---ch10 数据图形绘制与可视化

python数据分析--- ch10 python数据图形绘制与可视化 1. Ch10--python 数据图形绘制与可视化1.1 模块导入1.2 数据导入 2. 绘制直方图2.1 添加图表题2.2 添加坐标轴标签 3. 绘制散点图4. 绘制气泡图5. 绘制箱线图5.1 单特征的箱线图5.2 多特征的箱线图 6. 绘制饼图7. 绘制条形图…

每日5题Day25 - LeetCode 121 - 125

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {if(prices.length 1){return 0;}//dp…

热门开源项目推荐: diffusionbee

随着AI技术的快速发展&#xff0c;深度学习和机器学习已经成为各领域的热门话题。Stable Diffusion是一种强大的深度学习模型&#xff0c;它能够在图像生成和处理方面展现出惊人的效果。为了让更多用户能够轻松地使用Stable Diffusion&#xff0c;Diffusion Bee应运而生&#x…

el-table表头文字换行或者修改字体颜色样式

例如 <el-table:data"tableData":header-cell-style"headClass" style"width: 100%;" border ><el-table-columnprop"address"label"生产工序"align"center"></el-table-column> //重点看这里…

【2024算力大会分会 | SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 一、…

Leaflet集成wheelnav在WebGIS中的应用

目录 前言 一、两种错误的实现方式 1、组件不展示 2、意外中的空白 二、不同样式的集成 1、在leaflet中集成wheelnav 2、给marker绑定默认组件 2、面对象绑定组件 3、如何自定义样式 三、总结 前言 在之前的博客中&#xff0c;我们曾经介绍了使用wheelnav.js构建酷炫…

[深度学习]基于C++和onnxruntime部署yolov10的onnx模型

基于C和ONNX Runtime部署YOLOv10的ONNX模型&#xff0c;可以遵循以下步骤&#xff1a; 准备环境&#xff1a;首先&#xff0c;确保已经下载后指定版本opencv和onnruntime的C库。 模型转换&#xff1a;按照官方源码&#xff1a;https://github.com/THU-MIG/yolov10 安装好yolov…

vue2 + element-ui,前端配置化表单封装(2024-06-14)

技术栈是 vue2 element-ui&#xff0c;主要能解决的问题就是 提高代码复用能力、提升开发效率&#xff0c;特别是需要开发多个大型表单系统的&#xff0c;配置化可以极大的提升效率&#xff0c;让你上班摸鱼不再是梦想&#xff01;为了早点下班&#xff0c;我们接着往下看吧&a…

MySQLWorkbench导出sql文件

MySQLWorkbench导出sql文件 前言效果图导出操作选择要导出的数据库遇到的问题解决问题 查看mysql路径 前言 在完成数据库搭建之后&#xff0c;需要为上线做准备&#xff0c;那么就需要导出数据库的建库sql了 本篇文章讲解的是mysql Workbench 导出数据建库脚本 效果图 导出操…

51单片机STC89C52RC——代码编译

1&#xff0c;勾选 “Create HEX file” 2&#xff0c;编译

S686量产工具授权版,S686开卡教程,S686+EMMC固态硬盘开卡量产成功记录

手里有个S686EMMC组合的固态硬盘&#xff0c;华澜微的S686主控&#xff0c;之前一直没找到工具&#xff0c;感觉是废了&#xff0c;一直放着&#xff0c;偶然机会从桌子里又找到它&#xff0c;于是继续搜寻量产工具。 找到量产部落的一篇文章&#xff0c;里面说首发了S686的量产…

【gtest】 C++ 的测试框架之使用 gtest 编写单元测试

目录 &#x1f30a;前言 &#x1f30a;使用 cmake 启动并运行 gtest &#x1f30d;1. 设置项目 &#x1f30d;2. 创建并运行二进制文件 &#x1f30a;1. gtest 入门 &#x1f30d;1.1 断言&#xff08;assertions&#xff09; &#x1f30d;1.2 简单测试 &#x1f30d;…

《华为项目管理之道》第1章笔记

《华为项目管理之道》&#xff0c;是新出的华为官方的项目管理书&#xff0c;整个书不错。第1章的精华&#xff1a; 1.2.2 以项目为中心的机制 伴随着项目型组织的建立&#xff0c;华为逐步形成了完备的项目管理流程和制度&#xff0c;从而将业务运 作构建在项目经营管理之…

MySQL之优化服务器设置(三)

优化服务器设置 InnoDB表空间 InnoDB把数据保存在表空间内&#xff0c;本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间实现很多功能&#xff0c;并不只是存储表和索引。它还保存了回滚日志(旧版本行)、插入缓冲(Insert Buffer)、双写缓冲(Doublewrite …

Python | Leetcode Python题解之第148题排序链表

题目&#xff1a; 题解&#xff1a; class Solution:def sortList(self, head: ListNode) -> ListNode:def merge(head1: ListNode, head2: ListNode) -> ListNode:dummyHead ListNode(0)temp, temp1, temp2 dummyHead, head1, head2while temp1 and temp2:if temp1.v…

深入浅出 Babel:现代 JavaScript 的编译器

在现代前端开发中&#xff0c;JavaScript 的版本更新速度非常快&#xff0c;新的语法和特性层出不穷。然而&#xff0c;旧版本的浏览器并不总是支持这些新特性。为了确保代码的兼容性和稳定性&#xff0c;我们需要一个工具来将现代 JavaScript 代码转换为旧版本的代码。Babel 就…

pdf文件如何防篡改内容

PDF文件防篡改内容的方法有多种&#xff0c;以下是一些常见且有效的方法&#xff0c;它们可以帮助确保PDF文件的完整性和真实性&#xff1a; 加密PDF文档&#xff1a; 原理&#xff1a;通过设置密码来保护PDF文档&#xff0c;防止未经授权的访问和修改。注意事项&#xff1a;密…

【Linux】解锁权限的神秘面纱,让你的系统更安全、更高效!

XShell原理权限 1. Shell命令以及运行原理1.1 Shell外壳1.2 shell周边知识 2. Linux权限的概念2.1 用户2.2 用户切换2.3 sudo 3. Linux权限管理3.1 文件访问者的分类3.2 文件类型3.3 file指令3.4 文件访问权限3.5 文件权限值的表示方法 4. 文件访问权限的设置方法4.1 chmod指令…

【linux】应用程序访问百度时,操作系统内核网络接口日志

代码合入&#xff1a; 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/c639573cc7c4984913d4a89884347e5a30a51eac 启动操作系统运行dmesg的日志像这样&#xff1a; dmesg_log/2024_06_14_00_40_54.txt r77683962/linux-6.9.0 - Gitee.com 注意&#xf…