存档

2014年9月 的存档

隐藏Apache的版本号及其它敏感信息

2014年9月23日 没有评论

隐藏Apache的版本号及其它敏感信息
默认情况下,很多Apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的Apache模块。这些信息可以为黑客所用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。
这里有两条语句,你需要添加到你的httpd.conf文件中:
ServerSignature Off
ServerTokens Prod
ServerSignature出现在Apache所产生的像404页面、目录列表等页面的底部。ServerTokens目录被用来判断Apache会在Server HTTP响应包的头部填充什么信息。如果把ServerTokens设为Prod,那么HTTP响应包头就会被设置成:
Server:Apache

Win2003下Apache性能优化

2014年9月12日 没有评论

一直习惯在Solaris和linux下跑amp,前些时服务器硬盘坏掉,所以启用新服务器。新系统是Windows 2003 Server,在上面按Unix上的经验配置Apache和Mysql时问题多多,经过折腾,总算是让服务器稳定下来,总结问题和解决办法如下(apache2.2.8+Mysql5.0.51a+php5.2.5):

1、Apache线程数和超时设置

Apache的线程数控制文件为conf/exrtra/http-mpm.conf,需要在httpd.conf中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。

在Windows系统中,起作用的是Winnt mpm段,


ThreadsPerChild 150
MaxRequestsPerChild 0

缺省的配置一般够用,但负荷大的网站就要修改了,否则网站一下就变慢或没有响应了。实际可以根据apache-status查看apache实时连接状态,我的服务器最后设置如下:


ThreadsPerChild 350
ThreadLimit 350
MaxRequestsPerChild 10000

Win32DisableAcceptEx
EnableMMAP Off
EnableSendfile Off

其中ThreadLimit是占用系统线程数限制,最好加上,否则会产生内存溢出导致Apache当掉。

MaxRequestsPerChild我理解是请求的缓存数,太小了影响性能,占用cpu时间,太大了占用内存资源,想象一下你网站的文件个数,然后自己设定,只要不为0就可以,防止内存溢出。

ThreadsPerChlid是apache的线程数,就是开了这么多的线程来等待响应客户端请求,需要根据apache-status实时的监控调节,大了会占用过多内存,小了会导致连接不上。而且应该同时修改httpd-default.php超时设置来配合。

在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效。

其中调节以下参数

Timeout 15 (连接超时缺省为300,太大了,缩小会减少同时连接数,即上面占用的实际线程数)

KeepAlive On (开启可以提高性能,因为一个页面一般会有多个请求)

MaxKeepAliveRequests 50 (这个数目自己根据网页内容调节)

KeepAliveTimeout 5 (这个小于Timeout就行)

Windows下长期运行Apache还是不如Unix稳定,可以让Apache在凌晨人少时自动重启,用Windows的计划任务可以非常方便的实现这一点,这样网管基本上可以安心睡觉了。

PhpStudy开启Apache的gzip压缩功能

2014年9月10日 没有评论

PhpStudy是一款非常方便的搭建PHP动态网站或者服务器的国产集成软件包,包含apache、mysql、php等。可以到其官方网站查看并且下载。
注意这里的PhpStudy是Apache+php解决方案,另外一个PhpFind是Nginx+php解决方案。由于Apache的使用较多些,以下的所有示例均是针对Apache,当然,只要是Apache,不管是自己独立安装,还是选择象我这样的懒人方式,集成式一键安装。配置均相同。
gzip是GNUzip的缩写,它是一个GNU自由软件的文件压缩程序。当服务器开启gzip压缩功能以后,当有人访问服务器的网站时,服务器将网页内容压缩后传输到来访的电脑浏览器,浏览器进行解压再显示出来。一般对纯文本内容可压缩到原大小的70%甚至更高。
以前介绍过如何开启SAE的gzip压缩功能,以及Typecho的gzip压缩,另外还有tomcat的gzip的压缩。本文主要讲述如何开启Apache的gzip压缩功能。
要让apache支持gzip功能,要用到deflate_Module和headers_Module。打开apache的配置文件httpd.conf,大约在105行左右,找到以下两行内容:(这两行不是连续在一起的)

1
2
#LoadModule deflate_module modules/mod_deflate.so   
#LoadModule headers_module modules/mod_headers.so

然后将其前面的“#”注释删掉,表示开启gzip压缩功能。开启以后还需要进行相关配置。在httpd.conf文件的最后添加以下内容即可:

1
2
3
4
<IfModule deflate_module>  
    #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩   
    SetOutputFilter DEFLATE   
</IfModule>

最少需要加上以上内容,才可以生gzip功能生效。由于没有做其它的额外配置,所以其它相关的配置均使用Apache的默认设置。这里说一下参数“DeflateCompressionLevel”,它表示压缩级别,值从1到9,值越大表示压缩的越厉害。
注意,这里要强调一个地方,我是通过搜索引擎找到相关文章进行设置的,而这些文章可能是来回复制的,有错误都不知道,如果你也按照那些做法去做,八层是出错,直接Apache都启动不了。究其原因,主要是有个参数不匹配。在上面去掉注释的“#”,即:

1
LoadModule deflate_module modules/mod_deflate.so

这里以后会用到中间的名称,即deflate_module。后续开启gzip压缩中要使用该名称,即:

1
2
3
4
<IfModule deflate_module>  
      ......   
      ......   
</IfModule>

这两个deflate_module必须一致。网络上其它很多文章,都是不一致的,所以直接报错。
下面是另一个典型配置,供参考。这里不建议将图片视频等多媒体文件进行gzip压缩,一般只压缩纯文本格式的文件,如.php、.txt、.html、.css、.js等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<IfModule deflate_module>  
    #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩   
    SetOutputFilter DEFLATE   
 
    #压缩级别,1-9,9为最高   
    DeflateCompressionLevel 9      
 
    #不进行压缩的文件   
    SetEnvIfNoCase Request_URI \.(?:gif|jpeg|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩   
    SetEnvIfNoCase Request_URI \.(?:exe|tgz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩   
    SetEnvIfNoCase Request_URI \.(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary     
 
    #针对代理服务器的设置   
    <IfModule headers_moudle>  
    Header append vary User-Agent   
    </IfModule>  
</IfModule>