CentOS 7中Apache的优化与配置

栏目: Perl · 发布时间: 7年前

内容简介:记录下在CentOS 7中Apache的优化与配置的一些笔记,希望对大家有所帮助。现在的Web网站会由很多的图片、脚本、css以及flash等这些元素嵌入到页面中,如果不设置缓存或者缓存设置不当,会导致客户端向Web服务器访问时都会重新下载一次这些内容,浪费了很多带宽。通过Apache的mod_expires缓存模块来设置ExpiresHeader来缓存这些文件。expires模块通过Header报文来指定特定类型的文件在浏览器中的缓存时间,比如像图片、flash等这些在发布后不需要经常做修改的内容。因此

记录下在CentOS 7中Apache的优化与配置的一些笔记,希望对大家有所帮助。

mod_expires网页缓存时间

现在的Web网站会由很多的图片、脚本、css以及flash等这些元素嵌入到页面中,如果不设置缓存或者缓存设置不当,会导致客户端向Web服务器访问时都会重新下载一次这些内容,浪费了很多带宽。通过Apache的mod_expires缓存模块来设置ExpiresHeader来缓存这些文件。expires模块通过Header报文来指定特定类型的文件在浏览器中的缓存时间,比如像图片、flash等这些在发布后不需要经常做修改的内容。因此做了缓存之后,浏览器从web服务器上下载第一次之后,就不需要重新再次下载这些文件了,而是直接从浏览器的缓存中读取了。通过这样的设置能够让客户端的访问速度加快,同时也节省了很多带宽。

安装方法:编译时configure后面加--enable-expires即可,如果在编译安装时没有安装该模块,可以参考本文下面的 开启deflate压缩模块 ,单独编译模块的方法。 

/usr/local/apache/bin/apxs -c -i -a /usr/local/src/httpd-2.4.33/modules/filters/mod_expires.c

vi /usr/local/apache/conf/httpd.conf,找到并开启

LoadModule expires_module modules/mod_expires.so

缓存的方法有三种,分别是对目录,对全局,对虚拟主机

<ifmodule mod_expires.c>

ExpiresActive on

ExpiresDefault "access plus 12 month"

ExpiresByType text/html "access 12 month"

ExpiresByType text/css" access 12 month"

ExpiresByType image/gif" access 12 month"

ExpiresByType image/jpeg" access 12 month"

ExpiresByType image/jpg "access 12 month"

ExpiresByType image/png "access 12 month"

ExpiresByType application/x-shockwave-flash "access 12 month"

ExpiresByType application/x-javascript "access 12 month"

ExpiresByType video/x-flv "access 12 month"

</ifmodule>

全局缓存:直接在httpd.conf中配置以上内容

目录缓存:在httpd.conf中,找到你的网站目录位置中添加以上内容

<Directory '/usr/local/apache/htdocs'>

#上面配置

</Directory>

虚拟主机:

#<VirtualHost *:80>

#    ServerAdmin webmaster@dummy-host2.example.com

#    DocumentRoot "/usr/local/apache/htdocs"

#    ServerName 127.0.0.1:80

#    ErrorLog "logs/dummy-host2.example.com-error.log"

#    CustomLog "logs/dummy-host2.example.com-access.log" common

#    在这里加入上面的配置

#</VirtualHost>

expires模块语法:

expires模块用到了ExpiresDefault和ExpiresByType两个指令,以下是这两个指令的语法:

ExpiresDefault "<base>[plus]{<num><type>}*"

ExpiresByType type/encoding '<base>[plus]{<num><type>}'

其中,base的参数有三个:access,now(等价于'access'),modification

plus关键字是可选的

<num>必须是整数,确保可以atoi()所接收,(atoi可以把字符串转换成长整型数)

<type>参数类型:years,months,weeks,days,hours,minutes,seconds

使用缓存的好处:

1.缩短服务响应时间,

2.减少服务器负载,

3.减少所需的网络带宽量,降低成本。

缓存的缺点:由于使用了缓存,导致被缓存的内容有更新时,客户端看到的还是旧的

解决方案:

1.根据业务内容和需求,缩短缓存的时间

2.修改缓存文件的命名

隐藏版本号

用curl -I 域名 ,会发现如果没有设置隐藏版本号的话,服务器版本及Openssl信息会全都显示出来,这样容易暴露web服务器版本,进而通过版本号查找漏洞入侵web服务器。

例如:

HTTP/1.1 302 Found

Date: Wed, 11 Apr 2018 08:03:25 GMT

Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.6.32

X-Powered-By: PHP/5.6.32

Set-Cookie: PHPSESSID=slukigut3n2fkuii73r4tse9k1; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Location: /Home/Login/index.html

Content-Type: text/html; charset=UTF-8

以上信息暴露了apache的版本号以及openssl的版本号,按照下面的方法来隐藏Apache的版本号。

源码编译的Apache,以/usr/local/apache为主目录

1. vim /usr/local/apache/conf/httpd.conf                                                                ### 编辑httpd.conf文件

找到  Include conf/extra/httpd-default.conf,去掉前面的#号,使其生效,wq保存

2. vim /usr/local/apache/conf/extra/httpd-default.conf

找到ServerTokens选项,将其Full值改为Prod                                                                ### full值为显示版本号以及其它详细信息,Prod为隐藏这些信息

找到ServerSignature,将其On值改为Off                                                                                                                                                                                                                                                                ###  Yes为启用这个指令用来配置服务器端生成文档的页脚(错误信息mod_proxy的FTP目录列表、mod_info的输出),No为隐藏这些信息

以上方法只能隐藏版本号以及Openssl信息,如果需要真正隐藏命名,或者需要伪装一个新的命名,需要先修改Apache的源码包,然后再进行编译安装

以源码包httpd-2.4.33为例

1.cd 到解压好的 httpd-2.4.33 文件夹里

2.找到include/ap_release.h文件

3.vim httpd-2.4.33/include/ap_release.h文件

找到以下几行:

#define AP_SERVER_BASEVENDOR "Apache Software Foundation"              ###服务的供应商名称

#define AP_SERVER_BASEPROJECT "Apache HTTP Server"                            ###服务的项目名称         

#define AP_SERVER_BASEPRODUCT "Apache"                                                ###服务的产品名

#define AP_SERVER_MAJORVERSION_NUMBER 2                                            ###主版本号

#define AP_SERVER_MINORVERSION_NUMBER 4                                            ###小版本号

#define AP_SERVER_PATCHLEVEL_NUMBER  33                                              ###补丁级别

#define AP_SERVER_DEVBUILD_BOOLEAN    0                                                  #

将上边的内容改成你想要的信息,然后保存,前面的#号保留。编译安装,这样再用curl -I 域名 命令来查询时就是你修改后的信息了,对方就彻底不知道你的服务器是什么版本的了^_^

开启deflate压缩模块

启用Apache的deflate模块,可以开启压缩功能,减小网站传输时的带宽。

apache需要编译安装方式,以/usr/local/apache为apache的安装目录,以源码包/usr/local/src/httpd-2.4.33为例

首先查看/usr/local/apache/bin/apachectl -M    ###查看里面的模块是否有deflate模块,也可以过滤一下/usr/local/apache/bin/apachectl -M | grep deflate

若有则到httpd.conf下面开启,如果没有显示,或者用grep过滤后显示Syntax OK,则说明模块没有安装。

以动态共享模块方式(DSO)编译安装deflate模块

/usr/local/apache/bin/apxs -c -i -a /usr/local/src/httpd-2.4.33/modules/filters/mod_deflate.c        #其中前面部分是安装好的apache软件里面的apxs程序,后面是apache的源码安装包里面的deflate压缩模块

apxs程序编译选项:

-c 表示执行编译模块操作

-i  表示执行安装模块操作

-a 表示自动添加一个LoadModule行到httpd.conf文件中,以激活该模块

注意:如果提示-bash: /apache/bin/apxs: /replace/with/path/to/perl/interpreter: bad interpreter: No such file or directory。请安装perl,perl-devel

yum install perl perl-devel

安装完成后修改apxs脚本:  vi /usr/local/apache/bin/apxs,将第一行“#!/replace/with/path/to/perl/interpreter -w”修改为#!/usr/bin/perl -w,wq保存退出,然后再次编译该模块

安装完成后,vi /usr/local/apache/conf/httpd.conf中查看该模块是否安装及激活

LoadModule deflate_module            modules/mod_deflate.so

注意:如果启动apache提示httpd: Syntax error on line 105 of /apache/conf/httpd.conf: Cannot load modules/mod_deflate.so into server: /apache/modules/mod_deflate.so: undefined symbol: inflate

则说明deflate模块没有找到zlib的库,可以先安装zlib,zlib-devel

yum install zlib zlib-devel

然后手动在httpd.conf下 加入以下命令

LoadFile /usr/lib64/libz.so  ##libz.so为deflate压缩模块所需要的库文件

<ifmodule mod_deflate.c>

DeflateCompressionLevel 9

SetOutputFilter DEFLATE

DeflateFilterNote Input instream

DeflateFilterNote Output outstream

DeflateFilterNote Ratio ratio

AddOutputFilterByType    DEFLATE    text/html    text/plain    text/xml    text/css    text/javascript  application/xhtml+xml  application/xml    application/rss+xml    application/atom_xml    application/x-javascript      application/x-httpd-php    image/svg+xml    image/gif    image/png      image/jpe    image/swf    image/jpeg    image/bmp    application/javascript

</ifmodule>

DeflateCompressionLevel 9 ###压缩等级(1-9),等级越大效率越高,但同时消耗的CPU也高,根据具体情况调优,也可以设置为6来平衡CPU及压缩质量

AddOutputFilterByType  ##仅压缩限制特定的MIME类型文件

Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-09/153918.htm


以上所述就是小编给大家介绍的《CentOS 7中Apache的优化与配置》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Host Your Web Site In The Cloud

Host Your Web Site In The Cloud

Jeff Barr / SitePoint / 2010-9-28 / USD 39.95

Host Your Web Site On The Cloud is the OFFICIAL step-by-step guide to this revolutionary approach to hosting and managing your websites and applications, authored by Amazon's very own Jeffrey Barr. "H......一起来看看 《Host Your Web Site In The Cloud》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换