Linux_apachectl 网页优化

news2024/11/28 0:51:48

1.1 网页压缩与缓存

         在使用 Apache 作为 Web 服务器的过程中,只有对 Apache 服务器进行适当的优化配 置,才能让 Apache 发挥出更好的性能。反过来说,如果 Apache 的配置非常糟糕, Apache 可能无法正常为我们服务。因此,针对各种企业应用需求对 Apache 服务器的配置进行一定 的优化是必不可少的。

1.1 网页压缩

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

1. gzip 介绍

        gzip 是一种流行的文件压缩算法,目前应用非常广泛,尤其是在 Linux 平台。当使用gzip 压缩一个纯文本文件时,效果是非常明显的,大约可以减少 70 %以上的文件大小。利用 Apache 中的 gzip 模块,可以使用 gzip 压缩算法来对 Apache 服务器发布的网页内容进行压缩后再传输到客户端浏览器。经过压缩后,实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。
        网页加载速度加快的好处不言而喻。除了节省流量,改善用户的浏览体验外,另一个潜 在的好处是 gzip 与搜索引擎的抓取工具有着更好的关系。

2. HTTP 的压缩过程

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

3. Apache 的压缩模块

         Apache 1.x 系列没有内建网页压缩技术,使用的是额外的第三方 mod_gzip 模块来执第 2 页 共 17 页 行压缩。而 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 的压缩。

4. mod_deflate 模块​​​​​​

(1) 检查是否安装 mod_deflate 模块。

[root@www ~]# apachectl -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_worker_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)

(2) 重新编译 Apache 添加 mod_deflate 模块。

[root@www ~]# cd /usr/src/httpd-2.4.25/
[root@www httpd-2.4.25]# yum install -y zlib-devel
[root@www httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[root@www httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@www conf]# mv httpd.conf httpd.conf.bak
[root@www conf]# systemctl stop httpd.service 
[root@www conf]# cd /usr/src/httpd-2.4.25/
[root@www httpd-2.4.25]# make -j2 && make install

(3)配置 mod_deflate 模块启用

[root@www conf]# vim httpd.conf
Listen 192.168.56.10:80                                ##52行修改端口号
LoadModule deflate_module modules/mod_deflate.so       ##106行取消注释
ServerName www.ymk.com:80                             ##201行修改域名信息
###最后一行开启gzip功能
###设置对什么样的内容进行gzip压缩
###设置压缩级别1-9之间
###启用deflate模块对本站点的输出进行gzip压缩
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/hml text/plain text/css text/xml text/javascrpit text/jpg text/png
    DeflateCompressionLevel 9
    SetOutputFilter DEFLATE
</IfModule>

(4)检查安装情况,启动服务。

[root@www conf]# apachectl -t    ##检查配置文件是否正确
Syntax OK
[root@www conf]# apachectl -t -D DUMP_MODULES | grep "deflate"    ##检查 mod_deflate 模块是否安装
 deflate_module (shared)
[root@www conf]# systemctl start httpd.service    ##启动服务

测试缓存是否生效。

##编写网页文件

[root@www htdocs]# vim index.html    ##编写网页文件
<html>
 <body>
     <h1>It works! </h1>
     <img src="kai.jpg">
 </body>
</html>
[root@www htdocs]# systemctl restart httpd    ##重启服务

(5)浏览器访问,用F12按键查看。

在浏览器中选择“查看元素”可以看到有“AcceptEncoding:gzip”表示压缩已经生效。

 1.2 网页缓存

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

1. 配置 mod_expires 模块启用

(1)检查是否安装 mod_expires 模块

[root@www htdocs]# apachectl -t -D DUMP_MODULES | grep "expires"

如果没有安装 mod_expires 模块,重新编译安装 Apache 添加 mod_expires 模块。

[root@www htdocs]# systemctl stop httpd.service 
[root@www htdocs]# cd /usr/local/httpd/conf/
[root@www conf]# ls
extra  httpd.conf  httpd.conf.bak  magic  mime.types  original
[root@www conf]# mv httpd.conf httpd.conf.bak1
[root@www conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@www conf]# cd /usr/src/httpd-2.4.25/
[root@www httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires
[root@www httpd-2.4.25]# make -j2 && make install

(2)配置 mod_expires 模块启用

[root@www httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@www conf]# ls
extra  httpd.conf  httpd.conf.bak  httpd.conf.bak1  magic  mime.types  original
[root@www conf]# vim httpd.conf
###52行
Listen 192.168.56.10:80
###113行
LoadModule expires_module modules/mod_expires.so
###201行
ServerName www.ymk.com:80
###--末行添加-
<IfModule mod_expires.c>
  ###打开网页缓存功能
  ExpiresActive On
  ###设置缓存60秒
  ExpiresDefault "access plus 60 seconds"
</IfModule>

(3)检查安装情况,启动服务。

[root@www conf]# apachectl -t    ##验证配置文件是否配置正确
Syntax OK
[root@www conf]# apachectl -t -D DUMP_MODULES | grep "expires"    ##检查 mod_expires 模块是否安装
 expires_module (shared)
[root@www conf]# systemctl restart httpd    ##重启服务

(4)测试缓存是否生效

浏览器访问http://192.168.56.10

1.2 隐藏版本信息

(1)配置 Apache 隐藏版本信息

[root@www conf]# cd /usr/local/httpd/conf/
[root@www conf]# vim httpd.conf
###493行取消注释
Include conf/extra/httpd-default.conf
[root@www conf]# vim extra/httpd-default.conf 
###55行将原本的 Full 改为 Prod,只显示名称,没有版本
ServerTokens Prod
[root@www conf]# systemctl restart httpd    ##重启服务

ServerTokens表示 Server回送给客户端的响应头域是否包含关于服务器OS类型和编译过的模块描述信息

浏览器访问 http://192.168.56.10或者http://www.ymk.com 查看 Server 项

1.3 Apache 防盗链

 Apache 的默认配置除了性能可以优化外,还需要对安全性进行相应的配置。默认配置能保证服务器正常提供服务,但 Apache 作为一个软件,必然也会存在一些漏洞,尽可能的降低潜在的风险,是管理员必须掌握的内容。
        一般来说,用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个 HTTP 请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片,那么客户端的浏览器会再第 10 页 共 17 页次发送一条 HTTP 请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送 HTTP 请求才能够被完整的显示。
        基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了其他网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
        HTTP 标准协议中有专门的 Referer 字段记录,它的作用如下。

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

1. 配置防盗链

准备两台服务器、一台客户端,且两台服务器上已分别部署完 Apache 服务。

(1)在 Windows 系统中访问 http://192.168.56.10和 http://192.168.56.20,确保 Apache 工作正常, 如图所示。

2. 检查是否安装 mod_rewrite 模块 

检查是否安装mod_rewrite模块

[root@www ~]# apachectl -t -D DUMP_MODULES | grep "rewrite"

如果没有安装mod_rewrite模块,重新编译安装 Apache 添加mod_rewrite模块。

[root@www ~]# cd /usr/local/httpd/conf/
[root@www conf]# mv httpd.conf httpd.conf.bak2
[root@www conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@www conf]# cd /usr/src/httpd-2.4.25/
[root@www httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expire
[root@www httpd-2.4.25]# make -j2 && make install

配置mod_rewrite模块启用

[root@www httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@www conf]# vim httpd.conf
###159行
LoadModule rewrite_module modules/mod_rewrite.so
###添加如下内容
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://ymk.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://ymk.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ymk.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ymk.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.ymk.com/error.png

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

  • %{HTTP_REFERER} :存放一个链接的 URL,表示从哪个链接中转访问目录下的静态资源。
  • !^”:表示不以后面的字符串开头。
  • http://www.abc.com”:是本网站的路径,按整个字符串匹配。
  • .*$”:表示以任意字符结尾。
  • [NC] :表示不区分大小写字母。
  • RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/error.png 的字段含义:
  • . :表示匹配一个字符。
  • *”:表示匹配 0 到多个字符,与.合起来的意思是匹配 0 到多次前面的任意字符,如果是 1 到多次匹配可以用+表示。
  • “\.”:在这里的\是转义符,\.就代表符号.的意思。因为.在指令中是属于规则字符,有相应的含义, 如果需要匹配,需要在前面加个转义符\,其它规则字符如果需要匹配,也做同样处理。
  • (gif|jpg|swf)$ :表示匹配gif、jpg、swf任意一个,$表示结束。最后的规则是以.gif、.jpg、.swf结尾, 前面是1到多个字符的字符串,也就是匹配图片类型的文件。
  • http://www.abc.com/error.png :表示转发到这个路径 。

整个配置的含义是 使用本网站以外的网站域名 访问本站的图片文件时,显示error.png 这个图片。

3. 网页准备

web源主机配置

[root@www conf]# cd /usr/local/httpd/htdocs/
[root@www htdocs]# ls
error.png  index.html  kai.jpg
[root@www htdocs]# cat index.html 
<html>
 <body>
     <h1>www.ymk.com </h1>
     <img src="kai.jpg">
 </body>
</html>

盗链网站主机配置

[root@Linux02 ~]# cd /usr/local/httpd/htdocs/
[root@Linux02 htdocs]# cat index.html 
<html>
 <body>
    <h1>www.kai.com</h1>
    <img src="http://192.168.56.10/kai.jpg">
 </body>
</html>

 在盗图网站主机上进行浏览器验证

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

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

相关文章

【技能---500G硬盘-Ubuntu 20.04安装分区参考】

文章目录 Ubuntu 20.04安装分区指导安装分区流程Ubuntu 系统分区关键一步----- 选择安装启动引导器的设备 Ubuntu 20.04安装分区指导 安装Ubuntu 20.04的时候可以自己指定各个内存空间的占用&#xff0c;值得注意的是&#xff0c;这里的分区有一定的技巧&#xff01;&#xff0…

14:00面试,14:08就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到10月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40…

云原生技术专题 | 解密2023年云原生的安全优化升级,告别高危漏洞、与数据泄露说“再见”(安全管控篇)

背景介绍 2023年&#xff0c;我们见证了科技领域的蓬勃发展&#xff0c;每一次技术革新都为我们带来了广阔的发展前景。作为后端开发者&#xff0c;我们深受其影响&#xff0c;不断迈向未来。 随着数字化浪潮的席卷&#xff0c;各种架构设计理念相互交汇&#xff0c;共同塑造了…

工作流自动化:它是什么,常见示例以及如何实现

由于您的组织旨在留住顶尖人才和高价值客户&#xff0c;因此您需要不断为这两个团队提供一流的体验。 就客户而言&#xff0c;它可以实时解决他们的问题和疑虑&#xff0c;并以深思熟虑、可操作的洞察力主动与他们联系&#xff1b;而且&#xff0c;对于员工来说&#xff0c;它可…

微服务之间互相调用出现的错误

场景&#xff1a; 微服务A调用微服务B的接口&#xff0c;微服务B的接口请求方式是get类型&#xff0c;传递的参数是JSON格式。 错误&#xff1a; 1、postman&#xff1a;springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserial…

java数据结构与算法刷题-----LeetCode70. 爬楼梯

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

Android Framework | Linux 基础知识:入门指南

Android Framework | Linux 基础知识&#xff1a;入门指南 进行Android Framework开发需要具备基本的Linux基本知识&#xff0c;下面是一份Linux基础知识入门指南&#xff0c;希望对你有所帮助&#xff01; 1. 简介 Linux 是一种免费、开源的操作系统&#xff0c;它是由芬兰…

分布式之任务调度Elastic-Job学习一

1 E-Job 1.1 任务调度高级需求 Quartz 的不足&#xff1a; 1、 作业只能通过 DB 抢占随机负载&#xff0c;无法协调 2、 任务不能分片——单个任务数据太多了跑不完&#xff0c;消耗线程&#xff0c;负载不均 3、 作业日志可视化监控、统计 1.2 发展历史 E-Job 是怎么来的&…

第11课 实现桌面与摄像头叠加

在上一节&#xff0c;我们实现了桌面捕获功能&#xff0c;并成功把桌面图像和麦克风声音发送给对方。在实际应用中&#xff0c;有时候会需要把桌面与摄像头图像叠加在一起发送&#xff0c;这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo10并修改demo10为demo11…

Python 快速合并PDF表格转换输出CSV文件

单位的刷脸考勤机后台系统做得比较差&#xff0c;只能导出每个部门的出勤统计表pdf&#xff0c;格式如下&#xff1a; 近期领导要看所有部门的考勤数据&#xff0c;于是动手快速写了个合并pdf并输出csv文件的脚本。 安装模块 pypdf2&#xff0c;pdfplumber&#xff0c;前者用…

切换node.js不同版本

切换node.js不同版本 因新项目用到vite4创建项目&#xff0c;输入命令后报错&#xff0c;经查询得知是node版本过低导致&#xff0c;所以需要升级node版本&#xff0c;但是又有老的项目需要维护&#xff0c;因此需要多个版本的node使用需求。 流程&#xff1a; 卸载原有的node…

金和OA c6 uploadfileeditorsave接口存在任意文件上传漏洞

产品简介 金和网络是专业信息化服务商&#xff0c;为城市监管部门提供了互联网监管解决方案&#xff0c;为企事业单位提供组织协同OA系统升开发平台&#xff0c;电子政务一体化平台智慧电商平合等服务 漏洞概述 金和-c6 uploadfileeditorsave 任意文件上传&#xff0c;攻击者…

MySQL基础篇(四)多表查询

一、多表关系 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种&#xff1a; &#…

Hi5 2.0 虚拟手与追踪器(Tracker)的位置修正

问题描述 使用环境与工具&#xff1a;Unity 2022.3.4fc1&#xff0c;steam VR(2.7.3)&#xff0c;steamvrSDK&#xff08;1.14.15&#xff09;&#xff0c;HTC vive pro专业版&#xff0c;Hi5 2.0数据手套 首先按照Hi5 2.0的使用说明&#xff08;可参考&#xff1a;HI5 2.0 交…

【数据结构—二叉树的链式结构实现】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、二叉树的存储结构 二、二叉树链式结构的实现 2.1手动构建一课树 2.2二叉树的遍历 三、二叉树链式结构的实现 3.1前序遍历(递归) 3.2中序遍历(递归) 3.3后序…

多线程常用信号:ManualResetEvent,AutoResetEvent

1.了解信号 在这两个信号中: 1.Set方法可以将信号置为发送状态&#xff1b; 释放信号&#xff0c;所有等待信号的线程都将获得信号&#xff0c;开始执行WaitOne()后面的语句&#xff1b; 将事件状态设置为中&#xff0c;终止状态许一个或多个的等待线程继续 2.Reset方法将信号置…

【MFC】计算机图形学实验:熟悉开发环境及工具(代码)

实验内容&#xff1a; 【MFC】计算机图形学实验1&#xff1a;熟悉开发环境及工具_绘制多义线mfc-CSDN博客 画笔和字体只给出两处代码&#xff1a; //创建刷子&#xff0c;设置填充色为黑色 CBrush NewBrush; NewBrush.CreateSolidBrush(RGB(0, 0, 0)); pDC->SelectObjec…

静态网页设计——校园官网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 使用技术&#xff1a;HTMLCSSJS 主要内容&#xff1a;对学校官网的结构进行模仿&#xff0c;对布局进行模仿。 主要内容 1、首页 首页以多个div对页面进行分割和布局…

Apache Camel笔记

Apache Camel笔记 1. Apache Camel概念 Apache Camel是一个轻量级的应用集成开发框架&#xff0c;专注于简化集成应用的开发。它基于Enterprise Integration Patterns&#xff08;企业集成模式&#xff0c;简称EIP&#xff09;的设计理念&#xff0c;提供了灵活的路由和中介机制…

03、Kafka ------ CMAK(Kafka 图形界面管理工具) 下载、安装、启动

目录 CMAK&#xff08;Kafka 图形界面管理工具&#xff09;下载安装启动打开 cmak 图形界面 CMAK&#xff08;Kafka 图形界面管理工具&#xff09; Kafka本身并没有提供Web管理工具&#xff0c;而是推荐使用bin目录下各种工具命令来管理Kafka&#xff0c; 这些工具命令其实用起…