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 的链接都会弹出认证窗口。

标签: web, 优化

添加新评论