• Apache网页优化


    1.网页压缩与缓存

    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等静态文件,Wb服务器到压缩缓冲目录中检查是否己经存在请求文件的最新压缩文件。如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件。如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件。如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

    3.Apache的压缩模块

    Apache1,x系列没有内建网页压缩技术,使用的是额外的第三方mod_gzip模块来执行压缩。而Apache2.x官方在开发的时候,就把网页压缩考虑进去,内建了mod_deflate这个模块,用以取代mod_gzip。两者都是使用的gzp压缩算法,它们的运作原理是类似的。

    mod_deflate压缩速度略快而mod_gzip的压缩比略高。一般默认情况下,mod_gzip会比mod_deflate多出4%~6%的压缩量。

    一般来说,mod_gzip对服务器CPU的占用要高一些。mod_def1late是专门为确保服务器的性能而使用的一个压缩模块,mod deflate需要较少的资源来压缩文件。这意味着在高流量的服务器,使用mod_deflate可能会比mod_gzip加载速度更快。

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

    4.mod_deflate模块

    检查mod_deflate模块

    [root@apache httpd-2.4.25#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)
    [root@apache~#apachectl-t-D DUMP_MODULES grep"deflate"

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

    [root@apache~#tar zxf httpd-2.4.25.tar.gz-C /usr/src
    [root@apache~#cd /usr/src/httpd-2.4.25/
    [root@apache
    httpd-2.4.25#./configure-prefix=/usr/local/httpd--enable-so-enable-rewrite--enable-charset-l
    ite--enable-cgi-enable-deflate
    [root@apache httpd-2.4.25#make &make install
    [root@apache httpd-2.4.25#In-s /usr/local/httpd/bin/*/usr/local/bin

    (2)配置mod_deflate模块启用

    在httpd.conf文件,开启LoadModule deflate_module modules/.mod_deflate.so配置
    项,在文本末尾添加一下参数。

    [root@apache~#vim /usr/local/httpd/conf/httpd.conf
    .略.…
    LoadModule deflate module modules/mod deflate.so
    .略.

    DeflateCompressionLevel 6
    SetOutputFilter DEFLATE
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/csstext/javascript
    application/x-javascript application/javascript application/json
    SetEnvlfNoCase Request_URI.(?:gifljpe?glpng)s no-gzip dont-vary
    ∥设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
    SetEnvlfNoCase Request_URI .(?:exelt?gz|zip|bz2|sitrar)$no-gzip
    dont-vary
    设置不对exe,tgz,gz等文件进行压缩
    SetEnvlfNoCase Request_URI .(?pdflmovlavilmp3|mp4|rm)S no-gzip
    dont-vary
    AddOutputFilterByType DEFLATE text/*
    ∥设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
    AddOutputFilterBy Type
    DEFLATE
    application/ms*
    application/vnd*
    application/postscript application/javascrpt
    application/x-javascript
    ∥设置对javascript文件进行压缩
    AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
    ∥设置apache对php类型的文件进行压缩

    (3)检查安装情况

    检测httpd.conf语法,然后重新启动Apache服务器,并检查mod deflate模块安装情况。

    [root@apache~#apachectl-t
    Syntax OK
    [root@apache~#apachectl restart
    [root@apache~]#apachectl -t-D DUMP_MODULES grep "deflate"
    deflate_module (shared)

    (4)测试mod_deflate压缩是否生效

    使用火狐浏览器访问Apache服务器的URL地址,在浏览器中选择“查看元素”可以看
    到有“Accept--Encoding:gzip”表示压缩已经生效,如图所示。

    1.2网页缓存

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

    Apache的mod_expires 模块会自动生成页 面头部信息中的Expi「es标签和Cache-Control标签, 客户端 浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。

    配置mod_expires模块的步骤与mod_deflate模块相似。

    (1)配置mod_expires模块启用

    启用mod_expires模块之前, 可以用 浏览器先抓取数据包, 然后修改httpd.conf文件再抓 取数据包进行对比 。在httpd.conf 去掉LoadModule expires_modulemodules/mod_expires.so前面的#注释, 末尾加入以下内容。

    [root@apache~]#vim /usr/local/httpd/conf/httpd.conf
    ...略
    LoadModule expires_module modules/mod_expires.so
    ...略

    ExpiresActive On 
    ExpiresDefault "access plus 60 seconds"
     

    (2)检测httpd.conf语法

    [root@apache~]#apachectl -t 
    Syntax OK 

    (3)重启Apache服务

    使用火狐浏览器访问Apache服务器的URL地址, 在浏览器中选择“查看元素”可以查看到响应头中包含了Expires项如图所示, 说明缓存已经工作。

    2.隐藏版本信息

    一般情况下,软件的漏洞信息和特定版本是相关的。因此,软件的版本号对攻击者来说是很有价值的,在浏览器中选择 查看元素 可以看到Apache的版本2.4.25,如图所示。

    如果黑客别有用得到Apache的版本信息就会有针对性的进行攻击给网站造成很大的损失。所实际生产环境中要隐藏Apache的版本号受攻击的风险保护务器安全运行。

    修改httpd.conf配置文件使httpd-defauItc.onf文件生效它里面包含了是否返回版本信息的容。

    [root@apache~]#vim /usr/local/httpd/conf/httpd.conf 
    Include conf/exlra/htlpd-default.conf    //去掉前面的#

     然后修改httpd-defauIt.conf文件。

    [root@apache~]#vim /usr/local/httpd/conf/extra/httpd-default.conf 
    ServerTokens Prod    //将原本的Full改为Prod

    重新启动Apache服务使用狐浏览器访Apache服务器的URL地址浏览器选择查看元素可以查看到Apache的版本号已隐藏如图所示。 

    显示Server:Apache,版本信息已经被隐藏。ServerTokens表示Server回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息这里设置的是Prod列出ServerTokens的选项以及输出格式。 

    选项输出格式
    PropServe:Apache
    MajorServe:Apache/2
    MinorServer:Apache/2.4
    OSServer: Apache/2.4.25 (Unix)
    FullServe:Apache/2.4.25 (Unix) PHP/4.2.2 MyMod/1.2

    3.Apache防盗链

    Apache的默认配置除了性能可以优化外还需要对安全性进行相应的配置。默认配置能保证服务器正常提供服务Apache作为一个软件必然也会存在一些湍洞尽可能的降低潜在的风险是管理员必须掌握的内容。

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

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

    3.1配置防盗链

    准备两台服务器、一台客户端且两台服务器上已分别部署完Apache服务。具体实验环境如表所示。

    主机操作系统主要软件及版本
    apache1CentOS 7.3httpd-2.4.25.tar.gz
    apache1CentOS 7.3httpd-2.4.25.tar.gz
    客户端Windows 10火狐浏览器
    (1)在Windows系统中访问www.kxr.com和www.dt.com,确保Apache工作正常,如图所示

    (2)准备图片

    把图片复制到主服务器(www.kxr.com)的Apache工作目录/usr/local/httpd/htdocs,确保图片存在。

    [root@apache1 htdocs]#Is
    index.html  logo.jpg

    修改index.html网页文件加入图片显示代码。

     [root@apache1 htdocs]#vim    index.html

    lt work!
                                                   //网页中显示图片的代码

    (3)模拟盗取图片链接

    www.dt.com服务器修改index.html文件入盗取图片链接。

    [root@apache2 htdocs]#vim    index.html

    lt daotu
        //盗取链接图片

              

    访问www.dt.com图片即可显示。

    3.2Apache防盗链

    (1)配置mod_rewrite模块启用

    [root@apache conf]#vim httpd.conf
    ...略...
    LoadModule rewrite module modules/mod rewrite.so      //去掉#注释
    ...略...

    ...略...
    AllowOverride ALL  //改为ALL
    ...略...
    RewriteEngine On     //加入mode_rewrite模块内容
    RewriteCond %[HTTP_REFERER)!http://kxr.com/.*$[NC]
    RewriteCond %(HTTP_REFERER)!http://kxr.com$[NC]
    RewriteCond %(HTTP_REFERER)!http://www.kxr.com/.*$[NC]
    Rewrite Cond %[HTTP_REFERER)!http://ww.kxr.com/$[NC]

    RewriteRule ..(gifljpg|swf)S http://www.kxr.com/error.png

    mod rewrite模块需要在httpd.conf文件启用才能生效。

    (2)检测httpd.conf语法

    [root@apache conf#apachectl -t
    Syntax OK

     然后重新启动Apache服务器。

    (3)mod_rewrite模块主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言,可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。

    (4)基于服务器级的(htpd.conf)有两种方法,一种是在htpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能:另一种是在局部里利用RewriteEngine on来打开rewrite功能。

    (5)基于目录级的(.htaccess),要注意一点就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。

    (6)开启rewrite功能后,需要设置RewriteCond指令,它定义了匹配规则。如果符合某个或某几个条件,则执行RewriteCond下面紧邻的RewriteRule指令。如果不匹配,则后面的规则不再匹配,RewriteRule则定义需要重定向到的路径。

    匹配规则如表所示。

    规则描述
    %{HTTP REFERERY}浏览header中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页
    !^不以后面的字符串开头
    .*$以任意字符结尾
    NC不区分大小写
    R强制跳转
    ?匹配0到1个字符
    *匹配0到多个字符
    +匹配1到多个字符
    ^字符串开始标志
    $字符串结束标志
    .匹配任何单字符

    (7)RewriteEngine On打开了重写引擎,根据匹配规则我们分析RewriteCond%{HTTP_REFERER}!http:lww.kxr.coml.*$[NC]"含义。

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

    最后的规则是不以http://www.kxr.com”为路径,即不是本网站进行访问,后面是任意字符都可以匹配成功,其它几项可对照规则表分析。

    (8)如果请求路径被匹配,执行重定“RewriteRule.i.(gifljpglswf)$http:/www.kxr.com/eror.png”。

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

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

    重启服务器,并且清除浏览器的缓存,避免从本地读取缓存内容,复制error.png这个
    图片到工作目录usr/local/httpd/htdocs,再次访问网站,如图所示。

  • 相关阅读:
    【Linux网络】网络层协议:IP
    214页(10万字)以数据驱动为核心的区域医疗数据中台
    Unity UGUI的Scrollbar(滚动条)组件的介绍及使用
    nacos 与 seata 的整合
    AT32F407/437使用FreeRTOS并实现ping客户端
    源码编译OpenCV 启用cuda 加速
    设计模式——建造者模式
    5.4 Go语言中自定义类型与结构体(Struct)
    常见的js手写题【总结】
    STM32 IIC 实验
  • 原文地址:https://blog.csdn.net/m0_73868728/article/details/139699250