内容简介:记录下在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的优化与配置》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 6、如何获取配置中心的配置
- React降级配置及Ant Design配置
- vscode 配置eslint 开发vue的相关配置
- git commit 规范校验配置和版本发布配置
- hadoop地址配置、内存配置、守护进程设置、环境设置
- 在hibernate中配置事务级别与命名查询配置【原创】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
3D游戏设计与开发
2011-9 / 28.00元
《3D游戏设计与开发》,本书共分为九章:第一章主要对计算机游戏设计和3D游戏引擎进行简单介绍;第二章介绍3D游戏开发基础和Torque引擎的各种对象;第三章详细讲解游戏编程的语言及其语法;第四章详细介绍了Torque引擎编辑器的应用;第五章至第六章介绍了3D游戏的环境、角色和物品的制作;第七章讲解如何实现游戏音效;第八章详细介绍3D网络游戏的创建方法;第九章讲解如何掌握3D资源导入Torque引擎......一起来看看 《3D游戏设计与开发》 这本书的介绍吧!