实战:源码编译安装apache及调优技巧
查看apache安装版本
apache常见使用命令 :
使用rpm -qa命令查看httpd是否已经安装。
用ps -ef命令可以查看httpd是否应运行。
service httpd status命令,查看httpd的运行状态
注意 :nginx和apache端口都是80端口,启动apache时,需要停掉nginx服务 ,pkill -9 nginx
停止nginx服务的方法 :
1、查看进程号
# ps -ef|grep nginx
杀死进程
# kill -TERM 2132
或 # kill -INT 2132
2、强制停止
# pkill -9 nginx
实战环境:
生产环境中,部署了apache之后,我们应该从安全还是性能角度,在apache服务上线之前,对其做诸多的优化调试才行。
技巧1:
安装apache屏蔽apache版本等敏感信息
启动apache
[root@localhost ~]# /etc/init.d/httpd start
查看apache版本信息:
[root@localhost ~]# curl -I www.baidu.com
。。。
X-Powered-By: HPHP
Server: bfe/1.0.8.18
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xcfd31d8200026e11
BDUSERID: 0
测试自己的网站看是什么版本?有没有相应的漏洞
[root@localhost ~]# curl -I www.taobao.com
HTTP/1.1 302 Found
Server: Tengine 基于nginx做了二次开发
Date: Tue, 17 Nov 2015 02:22:06 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location: https://www.taobao.com/
彻底让版本等敏感信息消失
要彻底将版本之类的信息进行改头换面,需要在编译之前修改源码包下include/ap_release.h文件
[root@localhost httpd-2.2.25]# pwd
/usr/local/src
[root@localhost src]# tar zxf httpd-2.2.31.tar.gz
[root@localhost src]# cd httpd-2.2.31
[root@localhost httpd-2.2.25]# vim include/ap_release.h #修改源码中的版本信息为自己公司的相关信息,隐藏真实版本信息
改:
42 #define AP_SERVER_BASEVENDOR "Apache Software Foundation"
43 #define AP_SERVER_BASEPROJECT "Apache HTTP 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
为:
#define AP_SERVER_BASEVENDOR "xuegod"
#define AP_SERVER_BASEPROJECT " web server"
#define AP_SERVER_BASEPRODUCT " xuegod web server"
#define AP_SERVER_MAJORVERSION_NUMBER 8
#define AP_SERVER_MINORVERSION_NUMBER 1
#define AP_SERVER_PATCHLEVEL_NUMBER 2
#define AP_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_NUMBER 2 #主要版本号
#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 6 #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0 #
注:上述列出的行,大家可以修改成自己想要的,然后编译安装之后,再对httpd-default.conf文件进行修改,对方就彻底不知道你的版本号了。
源码编译安装apache
[root@localhost httpd-2.2.11]# yum install openssl*
[root@localhost 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 #支持设置网页缓存的时间
配置参数用途:
--prefix=:指定安装目录
--enable-so:支持动态加载模块
--enable-rewrite :支持网站地址重写
--enable-cgi:支持CGI程序脚本
--enable-ssl:支持SSL加密
--enable-charset-lite:支持多语言编码
编译:
[root@localhost httpd-2.2.25]# make -j 4 #把源代码编译成可执行的二进制文件。
-j 4 #以4个进程同时编译。 以4核CPU同时编译,快
-j 4 听:1 没有:2
安装:
[root@localhost httpd-2.2.25]# make install
启动apache:
配置apache 可以开机启动并且可以使用service 命令启动apache服务器
[root@localhost httpd-2.2.25]# cp /usr/local/apache2.2-xuegod/bin/apachectl /etc/init.d/apachectl-xuegod
启动apache:
[root@localhost httpd-2.2.25]# /etc/init.d/apachectl-xuegod start
测试:
测试:隐藏apache版本信息
[root@localhost ~]# curl -I 192.168.1.63 #看不到apache版本相关内容了
HTTP/1.1 200 OK
Date: Sat, 29 Aug 2015 09:43:44 GMT
Server: xuegod web server/8.1.2-dev (Unix) mod_ssl/8.1.2-dev OpenSSL/1.0.0-fips
Last-Modified: Sat, 29 Aug 2015 09:37:36 GMT
ETag: "6d086-3a-51e6ff35dba19"
Accept-Ranges: bytes
Content-Length: 58
Content-Type: text/html
再次隐藏版本号和系统类型
接下来再次修改:
[root@localhost ~]# vim /usr/local/apache2.2-xuegod/conf/httpd.conf
#Include conf/extra/httpd-default.conf
为:
Include conf/extra/httpd-default.conf
2)打开httpd-default.conf文件,修改如下两个地方
[root@localhost ~]# 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@localhost ~]# /etc/init.d/apachectl-xuegod -h #apache服务配置信息
[root@localhost ~]# /etc/init.d/apachectl-xuegod graceful 优雅的重启,不影响业务,进行的连接;
测试:
[root@localhost ~]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Date: Thu, 14 Jan 2016 02:31:24 GMT
Server: xuegod web server
优化技巧2:2mod_expires: 设置网页缓存时间
平时,我们大多数的图片,flash在发布之后都是不需要经常修改的,因此做了缓存之后,游览器第一次从服务器下载之后,就不需要再从服务器下载这些文件而是直接从游览器缓存中读取了。这样客户访问页面的速度就会大大加快,企业的带宽压力也得到了缓解。
实战: 对图片,flash缓存12个月
[root@localhost ~]# vim /usr/local/apache2.2-xuegod/conf/httpd.conf #在最后添加以下内容:
在57 <IfModule !mpm_netware_module>
58 <IfModule !mpm_winnt_module>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType text/html "access plus 12 months"
ExpiresByType text/css "access plus 12 months"
ExpiresByType image/gif "access plus 12 months"
ExpiresByType image/jpeg "access plus 12 months"
ExpiresByType image/jpg "access plus 12 months"
ExpiresByType image/png "access plus 12 months"
EXpiresByType application/x-shockwave-flash "access plus 12 months"
EXpiresByType application/x-javascript "access plus 12 months"
ExpiresByType video/x-flv "access plus 12 months"
</IfModule>
重启服务:
[root@localhost ~]# /etc/init.d/apachectl-xuegod restart
测试:
上传一张图片a.jpg 到/usr/local/apache2.2-xuegod/htdocs下:
[root@localhost ~]# cp a.jpg /usr/local/apache2.2-xuegod/htdocs
使用YSlow插件进行缓存效果查看。
缓存优化对企业来说是至关重要了的,不同的业务类型,对于缓存的类型和时间又各不相同,大家具体可以用YSlow对淘宝,京东,新浪,谷歌等站点进行测试,看看他们的缓存时间是多少,并思考下为什么那样设置。
查看天猫缓存时间:
注:天猫解决被缓存文件及时更新的方法:对缓存的对象改名
虽然缓存的设置有如下优点
1.缩短服务的响应时间
2.减轻服务器负担
3.减少网络带宽使用量,降低企业成本
但是他的缺点也是显而易见的,由于使用了缓存设置,导致被缓存的内容更新了,但是客户看到的却还是旧的。
第一种:缩短缓存时间例如:1天,不彻底牺牲性能
第二种:对缓存的对象改名。
总结:
优化1 : 隐藏apache版本号,让黑客找不漏洞
优化2:开启缓存功能,节省服务器开销
apache一共有32处调优