阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7中Apache的优化与配置

162次阅读
没有评论

共计 5660 个字符,预计需要花费 15 分钟才能阅读完成。

记录下在 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 类型文件

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5660字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中