实战:源码编译安装apache及调优技巧
实战环境:
生产环境中,部署了apache之后,我们应该从安全还是性能角度,在apache服务上线之前,对其做诸多的优化调试才行。
Apache
实验环境:
apache版本:httpd-2.2.31
源码包存放位置:/usr/local/src
源码包编译安装位置:apache:/usr/local/apache2.2-xuegod/
技巧1:
安装apache屏蔽apache版本等敏感信息
查看apache版本信息:
[root@xuegod63 ~]# curl -Iwww.baidu.com
。。。
X-Powered-By: HPHP
Server: BWS/1.1
X-UA-Compatible:IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xcfd31d8200026e11
BDUSERID: 0
测试自己的网站看是什么版本?有没有相应的漏洞
[root@xuegod63 ~]# curl -Iwww.taobao.com
HTTP/1.1 302 Found
Server:Tengine 基于nginx做了二次开发
Date: Tue, 17 Nov 201502:22:06 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location:https://www.taobao.com/
彻底让版本等敏感信息消失
要彻底将版本之类的信息进行改头换面,需要在编译之前修改源码包下include/ap_release.h文件
[root@xuegod63 httpd-2.2.25]#pwd
/usr/local/src
[root@xuegod63 src]# rm -rfhttpd-2.2.25
[root@xuegod63 src]# tar zxfhttpd-2.2.25.tar.gz
[root@xuegod63 src]# cdhttpd-2.2.25
[root@xuegod63 httpd-2.2.25]#vim include/ap_release.h #修改源码中的版本信息为自己公司的相关信息,隐藏真实版本信息
改:
42 #define AP_SERVER_BASEVENDOR"Apache Software Foundation"
43 #define AP_SERVER_BASEPROJECT "ApacheHTTP Server"
44 #define AP_SERVER_BASEPRODUCT"Apache"
45
46 #define AP_SERVER_MAJORVERSION_NUMBER 2
47 #define AP_SERVER_MINORVERSION_NUMBER 2
48 #define AP_SERVER_PATCHLEVEL_NUMBER 25
49 #define AP_SERVER_DEVBUILD_BOOLEAN 0
为:
#defineAP_SERVER_BASEVENDOR "xuegod"
#defineAP_SERVER_BASEPROJECT " web server"
#defineAP_SERVER_BASEPRODUCT " xuegod web server"
#defineAP_SERVER_MAJORVERSION_NUMBER 8
#defineAP_SERVER_MINORVERSION_NUMBER 1
#defineAP_SERVER_PATCHLEVEL_NUMBER 2
#defineAP_SERVER_DEVBUILD_BOOLEAN 3
注释:
#define AP_SERVER_BASEVENDOR"Apache Software Foundation" #服务的供应商名称
#define AP_SERVER_BASEPROJECT"Apache HTTP Server" #服务的项目名称
#define AP_SERVER_BASEPRODUCT"Apache" #服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER2 #主要版本号
#defineAP_SERVER_MINORVERSION_NUMBER 4 #小版本号
#defineAP_SERVER_PATCHLEVEL_NUMBER 6 #补丁级别
#defineAP_SERVER_DEVBUILD_BOOLEAN 0 #
注:上述列出的行,大家可以修改成自己想要的,然后编译安装之后,再对httpd-default.conf文件进行修改,对方就彻底不知道你的版本号了。
源码编译安装apache
[root@xuegod63 httpd-2.2.11]# yum installopenssl*
[root@xuegod63 httpd-2.2.25]#./configure --prefix=/usr/local/apache2.2-xuegod --enable-so --enable-rewrite--enable-ssl --enable-deflate --enable-expires #检查安装环境并生成Makefile文件
配置参数用途:
--prefix=/usr/local/apache2.2 #指定安装路径
--enable-so # 支持动态加载模块
--enable-rewrite #支持网站地址重写
--enable-ssl # 支持ssl加密
--enable-deflate #支持页面传输前进行压缩
--enable-expires #支持设置网页缓存的时间
编译安装:make&& make install
查看安装后目录:
[root@xuegod63 httpd-2.2.25]# ls/usr/local/apache2.2-xuegod/conf/httpd.conf
/usr/local/apache2.2-xuegod/conf/httpd.conf
存放网站的根目录:
[root@xuegod63 httpd-2.2.25]#ls /usr/local/apache2.2-xuegod/htdocs/
index.html
修改默认首页内容:
[root@xuegod63 httpd-2.2.25]# echo apache-xuegod>> /usr/local/apache2.2-xuegod/htdocs/index.html
启动apache:
配置apache 可以开机启动并且可以使用service 命令启动apache服务器
[root@xuegod63 httpd-2.2.25]#cp /usr/local/apache2.2-xuegod/bin/apachectl /etc/init.d/apachectl-xuegod
启动apache:
[root@xuegod63httpd-2.2.25]# /etc/init.d/apachectl-xuegod start
测试:
测试:隐藏apache版本信息
[root@xuegod63 ~]# curl -I192.168.1.63 #看不到apache版本相关内容了
HTTP/1.1 200 OK
Date: Sat, 29 Aug 201509:43:44 GMT
Server: xuegod web server/8.1.2-dev (Unix) mod_ssl/8.1.2-devOpenSSL/1.0.0-fips
Last-Modified: Sat, 29 Aug2015 09:37:36 GMT
ETag: "6d086-3a-51e6ff35dba19"
Accept-Ranges: bytes
Content-Length: 58
Content-Type: text/html
再次隐藏版本号和系统类型
接下来再次修改:
[root@xuegod63 ~]# vim/usr/local/apache2.2-xuegod/conf/httpd.conf
405 #Includeconf/extra/httpd-default.conf
为:
Includeconf/extra/httpd-default.conf
2)打开httpd-default.conf文件,修改如下两个地方
[root@xuegod63 ~]# vim/usr/local/apache2.2-xuegod/conf/extra/httpd-default.conf
改:
55 ServerTokens Full
65 ServerSignature On signature 签名
为:
ServerTokens Prod #不显示服务器操作系统类型
ServerSignature Off #不显示web服务器版本号
让apache配置文件生效的方法:
方法1:重启服务:restart
方法2:不重启服务,重新加载配置文件
reload是nginx
[root@xuegod63 ~]#/etc/init.d/apachectl-xuegod graceful 优雅的
测试:
[root@xuegod63 ~]# curl -I192.168.1.63
HTTP/1.1 200 OK
Date: Thu, 14 Jan 201602:31:24 GMT
Server: xuegod web server
总结:
1, 安装之前改include/ap_release.h
2, Httpd.conf extra/httpd-default.conf去掉注释
3, 修改extra/httpd-default.conf
55 ServerTokens Full
65 ServerSignature On signature 签名
为:
ServerTokens Prod #不显示服务器操作系统类型
ServerSignature Off #不显示web服务器版本号
2、错误页面优雅显示
为了提升网站的用户体验,避免404,403之类的丑陋的默认错误提示出现。
方法一:
[root@xuegod63 ~]# vim/usr/local/apache2.2-xuegod/conf/httpd.conf #在根目录的标签中添加以下红色标记内容。
132 <Directory"/usr/local/apache2.2-xuegod/htdocs">
。。。
在大约159行,插入:
ErrorDocument 404 /404.html
160 </Directory>
注:#将404错误跳转到/usr/local/apache2.2-xuegod/htdocs下的404.html页面上
注:ErrorDocument的命令格式如下:
ErrorDocument 错误代码 跳转到的页面链接或文件
创建404测试页:
[root@xuegod63 ~]# echo"404 go to home" > /usr/local/apache2.2-xuegod/htdocs/404.html
重启:
[root@xuegod63 ~]# /etc/init.d/apachectl-xuegodrestart
方法2: 出错后,跳转到一个链接
[root@xuegod63 ~]# vim/usr/local/apache2.2-xuegod/conf/httpd.conf #在根目录的标签中添加以下红色标记内容。
132 <Directory"/usr/local/apache2.2-xuegod/htdocs">
。。。
在大约159行,插入:
ErrorDocument 404 http://www.baidu.com
160 </Directory>
注:#将404错误跳转到http://www.baidu.com
重启:
[root@xuegod63 ~]#/etc/init.d/apachectl-xuegod restart
总结:ErrorDocument的命令格式如下:
ErrorDocument 错误代码 跳转到的页面或文件
另外这里需要注意,你若设置跳转到文件,必须要有这个文件才行。另外文件必须在站点目录内,不然会报错。
终极总结:
1、 隐藏web服务的版本信息
2、 出现404错误,给它一个友好的提示