Apache httpd访问日志
Apache的安装之后,服务器一运行就会有两个日志文件生成。这两个文件是access_log和error_log,这些文件可以在/usr/local/apache/logs下找到。
1. 配置访问日志
修改 httpd 的主配置文件,将以下配置前面的注释去掉:
vim /usr/local/apache24/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
以上配置参数介绍,这些参数可按需增删,一般默认即可。
%h:远程主机。
%l:远程登录名字(来自identd,如提供的话)。
%u:远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%t:以公共日志时间格式表示的时间(或称为标准英文格式)。
%r:请求的第一行。
%s:请求的状态码。对于进行内部重定向的请求,这是指原来请求的状态。如果用 %>s,则是指后来的请求。
%b:CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%{Referer}i:来源地址。
%{User-Agent}i:浏览器标识。
combined 和 common 是日志的组合方式。
然后修改虚拟主机配置文件:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
2. 日志切割
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
CustomLog "|/usr/local/apache24/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400 combined
</VirtualHost>
rotatelogs
是 httpd 自带的日志切割工具,它会把访问日志按照定义的格式进行切割,其中 86400
单位为秒,表示一天。
3. 过滤静态元素
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
SetEnvIf Request_URI ".*\.gif$" img
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
SetEnvIf Request_URI ".*\.css$" img
CustomLog "logs/111.com-access_log" combined env=!img
</VirtualHost>
4. 防盗链
配置方法如下所示:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
CustomLog "logs/111.com-access_log" combined
<Directory /data/wwwroot/www.111.com>
SetEnvIfNoCase Referer "http://www.111.com" local_ref
SetEnvIfNoCase Referer "http://111.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
</VirtualHost>
5. 用户认证
用户认证是指在用户访问网站的时候,需要输入用户名密码才能正常访问,一般比较重要的站点或者网站后台通常会加上用户认证来保证安全。
1)、修改虚拟主机配置文件,将第二配置段修改如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
<Directory /data/wwwroot/www.111.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "111.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic,其他类型没用过
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
</VirtualHost>
2)、创建密码文件:
/usr/local/apache24/bin/htpasswd -cm /data/.htpasswd admin
New passwod:
Re-type new password:
Adding password for user admin
htpasswd
为创建用户的工具,-c 为创建,-m 指定密码加密方式为 MD5。/data/.htpasswd
是密码文件,admin 为用户。第一次执行时需要加 -c,第二次再创建新用户时则不用添加,否则密码文件会被重置。
重新加载 httpd 后,再次打开浏览器输入域名则会发现弹出认证窗口,输入用户名密码后正常访问。
上例中进行的是对整个站点的用户认证,如果一个文件,则需要修改成以下配置:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.111.com"
ServerName www.111.com
<FilesMatch test.php>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
</VirtualHost>
注:网址中所有带有 test.php
的链接都会弹出认证窗口。