首先关闭apache的目录遍历

wKiom1jNR9XDTtssAAAMMxYJQc4831.png

在apache的主配文件中将Indexes这个去掉即可

不然在访问不存在的网页时候

apache会自动显示一个类似目录的页面


在主配文件中启用

Include conf/extra/httpd-default.conf

2修改httpd-default.conf

文件:/usr/local/http-2.4.23/conf/extra/httpd-default.conf

找到

ServerTokens Full

ServerSignature On

改成

ServerTokens Prod

ServerSignature off


如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新编译了。在重新编译时,修改源码包下include目录下的ap_release.h文件

wKioL1jNS-mTksXMAAA9KYsbWk4763.png

#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 23  #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN  0  #

上述列出的行,已经给出了注释,大家可以修改成自己想要的,然后编译安装之后,对方就彻底不知道你的版本号了。


apache日志切割

日志太大影响以后的维护查询修复

使用rotatelogs  apache自带的工具每天重新生成一个日志文件

Apache的主配置文件,更改内容如下:
注释掉如下两行
ErrorLog logs/error_log

CustomLog logs/access_log common
然后添加如下两行

ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400"

CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined

注:其中86400为轮转的时间单位为秒

或者使用cronolog 每天一个新的日志文件

安装cronolog程序

下载cronolog  [root@www ~]# tar zxf cronolog-1.6.2.tar.gz

[root@www ~]# cd cronolog-1.6.2/

[root@www cronolog-1.6.2]# ./configure && make && make install

 

主配置文件中的使用方法

ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y%m%d.log"

CustomLog "|/usr/local/sbin/cronolog logs/access-%Y%m%d.log" combined

如果Apache中有多个虚拟主机,最好每个虚拟主机中放置一个这样的代码,并将日志文件名改成不同的名字。

扩展:

这个保证了每天一个文件夹 文件夹下 每个小时产生一个log

CustomLog "|/usr/local/sbin/cronolog logs /%Y%m%d/access_log.%H" combined

 

按天轮询(生产环境常见用法,推荐使用):
CustomLog "|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log" combined


按小时轮询(生产环境较常见用法):
CustomLog "|/usr/local/sbin/cronolog logs /access_www_ %Y%m%d%H.log" combined

 

验证:查看logs目录下的日志文件

[root@www ~]# ls /usr/local/http-2.4.23/logs/

access-20161026.log  access_log  deflate_log.log  error-20161026.log  error_log  httpd.pid

注意:

这两个管道日志文件程序还有一点不同之处是使用 cronolog 时如果日志是放在某个不存在的路径则会自动创建目录,而使用 rotatelogs 时不能自动创建,这一点要特别注意

 


配置防盗链

有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有可能是被别人盗链了

举个例子:比如discuz论坛,里面有些热点图片视频;然后别人将他网站上访问图片的地址重定向到discuz上,这样他的服务器就可以空闲出来了;也就是说别人访问他网站的图片视频,消耗的确是你服务器的资源;

解决这个问题的方法是配置下防盗链,让外来的盗不了链;

方法1Apache 防盗链的第一种实现方法,可以用rewrite实现。

首先要确认 Apache rewrite module可用:

[root@www ~]# apachectl -M | grep rewrite

rewrite_module (shared)

打开 httpd.conf,确保有这么一行配置:

LoadModule rewrite_module modules/mod_rewrite.so

然后在找到自己网站对应的配置的地方(如在主配置文件中或虚拟主机中),加入下列代码:

ServerName www.benet.com

#防盗链配置

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png [R,NC,L]

注:相关选项的解释

1.RewriteEngine On #启用rewrite要想rewrite起作用,必须要写上

2.RewriteCond test-string condPattern #写在RewriteRule之前,可以有一或N条,用于测试rewrite的匹配条件,具体怎么写,后面会详细说到。

3.RewriteRule Pattern Substitution #规则

4. %{HTTP_REFERER}:服务器变量,HTTP Refererheader的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

5.[ NC]指的是不区分大小写,[R] 强制重定向 redirect

6. 字母L表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则

防盗链配置的说明

1. 红色部分: 表示自己的信任站点。对我的站点来说,设置为 http://www.benet.com http://benet.com

2. 绿色部分: 要保护文件的扩展名(|分开)。以这些为扩展名的文件,必须通过红色标注的网址引用,才可以访问。

3. 蓝色部分: 定义被盗链时替代的图片,让所有盗链 jpggifswf 等文件的网页,显示网页文档根目录下的about/ nolink.png 文件注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。当然你也可以不设置替换图片,而是使用下面的语句即可:RewriteRule .*\.(gif|jpg|png)$ - [F]

注:[F] (强制URL为被禁止的 forbidden),强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)

注:

RewriteCond  %{HTTP_REFERER}  !^$ 上面这一行意在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。

RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

设置允许访问的HTTP来源,包括网站自身

RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png [R,NC,L]

将不满足referer条件的访问重定向至nolink.png nolink.png位于允许盗链的目录about中,要相当注意,不然,警告信息和图片将无法在对方网站上显示。 

注意:测试时要清除济浏览器缓存

方法2通过判断浏览器头信息来阻止某些请求,即利用SetEnvIfNoCaseaccess

这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

语法: SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...

SetEnvIfNoCase 当满足某个条件时,为变量赋值,根据客户端请求属性设置环境变量

注:Referer :指明了请求当前资源原始资源的URL,使用referer是可以防盗链

然后在找到自己网站对应的配置的地方(如在主配置文件中或虚拟主机中),加入下列代码: 

SetEnvIfNoCase Referer "^$" local_ref

SetEnvIfNoCase Referer "www.benet.com/.*$" local_ref

SetEnvIfNoCase Referer "benet.com/.*$" local_ref

<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif)">

# 2.4版本以下的

    方法一:

    Order Deny,Allow

    Allow from env=local_ref

    Deny from all

    方法二:

    Order Allow,Deny

    Allow from env=local_ref

 

#2.4版本以上,方法如下:

    Require all denied

    Require env local_ref

</filesmatch>