Apache默认虚拟主机
一台服务器可以访问多个网站,每个网站都是一个虚拟主机
概念:域名(主机名)、DNS、解析域名、hosts
任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
Apache的主配置文件/usr/local/apache2.4/conf/httpd.conf
下,网站的文件在
DocumentRoot "/usr/local/apache2.4/htdocs"
<Directory "/usr/local/apache2.4/htdocs">
主机域名在
ServerName
www.example.com:80
但是,这样就有一个问题,一个配置了LAMP的linux服务器,只能跑一个网站。
要想跑多个网站,只能关闭主配置文件下的主机域名和网站文件后,做多个虚拟主机,而多个虚拟主机中的第一个被默认为默认虚拟主机。
在主配置文件下打开虚拟主机配置文件,主配置文件就失效了
在主配置文件下打开虚拟主机配置文件
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
虚拟主机配置文件(/usr/local/apache2.4/conf/extra/httpd-vhosts.conf )
打开虚拟主机配置文件就能配置多个网站域名
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin
webmaster@dummy-host.example.com
ServerName
dummy-host.example.com
ServerAlias
www.dummy-host.example.com
</VirtualHost>
<VirtualHost *:80>
ServerAdmin
webmaster@dummy-host2.example.com
ServerName
dummy-host2.example.com
</VirtualHost>
每一个VirtualHost都表示一个虚拟主机,每一个虚拟主机都对应一个域名
对虚拟主机配置文件做配置:
<VirtualHost *:80>
</VirtualHost>
定义一个网站的追主要的两个参数DocumentRoot,ServerName
写虚拟主机配置文件:
<VirtualHost *:80>
ServerName
abc.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
创建文件
[root@ma-1 ~]# mkdir /data/wwwroot/
[root@ma-1 ~]# mkdir /data/wwwroot/
abc.com
[root@ma-1 ~]# mkdir /data/wwwroot/111.com
编写网页文件
[root@ma-1 ~]# vim /data/wwwroot/
abc.com/index.php
<?php
echo "111.com";
?>
[root@ma-1 ~]# vim /data/wwwroot/111.com/index.php
<?php
echo "111.com";
?>
检查配置文件有没有出错
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
重新加载配置文件
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl graceful
命令curl
作用:打开网页
选项:
-x 指定IP地址
httpd的用户认证
有些网站为了增加安全性,在你打开网站时,要输入用户名和密码,这里的用户名和密码还不是你自己能注册的,得管理员给你权限。通常这样的做法不多,但是有这样一种可能,打开网站时不需要认证,但你打开某个特定的页面时,通常是只允许内部人员打开,就要用户认证。
想要进行用户认证,就要对虚拟主机的配置文件进行编辑,如下:
<VirtualHost *:80>
ServerName
www.123.com
用户认证
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "123.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
</VirtualHost>
进行整个网站的用户认证
编辑虚拟主机配置文件
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
生成用户名密码:
[root@ma-1 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd shuai
New password:
Re-type new password:
Adding password for user shuai
[root@ma-1 ~]# /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd aoli
New password:
Re-type new password:
Adding password for user aoli
[root@ma-1 ~]# cat /data/.htpasswd
shuai:$apr1$nFOYpbK0$rCD.Yamunrac2ZRrhP4Yr1
aoli:$apr1$ICctgglv$JgpwNfsP8VHH6/PSxFXFs/
-c 创建文件的
-m 是用md5加密的
检查配置文件语法,重新加载配置文件
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl graceful
用curl打开
[root@ma-1 ~]# curl -x127.0.0.1:80 111.com
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
显示特征号401 访问需要用户认证
[root@ma-1 ~]# curl -x127.0.0.1:80 -ushuai:111111 111.com -I
HTTP/1.1 200 OK
Date: Wed, 20 Dec 2017 07:44:52 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
问题1:在Windows端登录,可能会出错,无法显示,请看这一篇的问题三
http://blog.csdn.net/aoli_shuai/article/details/78847700
指定某一个特定的页面进行用户认证
<FilesMatch 123.php>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
指定得是123.php文件
配置虚拟主机配置文件
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
# <Directory /data/wwwroot/111.com>
<FilesMatch 123.php>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
# </Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
检查配置文件语法,重新加载配置文件
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl graceful
编辑一个123.php文件
[root@ma-1 ~]# vim /data/wwwroot/111.com/123.php
<?php
echo "123.php";
?>
登录:
[root@ma-1 ~]# curl -x127.0.0.1:80 111.com -I
HTTP/1.1 200 OK
Date: Wed, 20 Dec 2017 07:59:09 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
[root@ma-1 ~]# curl -x127.0.0.1:80 111.com/123.php -I
HTTP/1.1 401 Unauthorized
Date: Wed, 20 Dec 2017 07:59:23 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1
[root@ma-1 ~]# curl -x127.0.0.1:80 -ushuai:111111 111.com/123.php -I
HTTP/1.1 200 OK
Date: Wed, 20 Dec 2017 07:59:45 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
问题2:
如果要修改网站用户认证的密码,怎么操作?
htpasswd 重新给这个用户设置密码即可。
域名跳转
域名跳转也叫做301重定向,当我们变更网站域名,或者申请多个域名指向一个网站的时候,这个时候我们就会用到域名跳转(或者叫域名重定向redirect、域名转向)
几个特征码:
401 访问认证
403 不允许访问(配置文件能设置)
404 页面不存在
301 永久重定向
302 零时重定向
200 正确
域名跳转设置:
<VirtualHost *:80>
ServerName
www.123.com
ServerAlias 123.com
<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
RewriteEngine on //打开rewrite功能
RewriteRule ^/(.*)$
http://www.123.com/$1
[R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行,并将域名后面的移到
www.123.com/
后面
</IfModule>
</VirtualHost>
域名跳转需要mod_rewrite模块支持
打开虚拟主机配置文件:
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
# <Directory /data/wwwroot/111.com>
# <FilesMatch 123.php>
# AllowOverride AuthConfig
# AuthName "111.com user auth"
# AuthType Basic
# AuthUserFile /data/.htpasswd
# require valid-user
# </FilesMatch>
# </Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
检测配置文件语法并重新加载配置文件
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl graceful
检测Apache是否加载rewrite模块
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
没有加载,去配置文件设置
[root@ma-1 ~]# vi /usr/local/apache2.4/conf/httpd.conf
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module modules/libphp5.so
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
rewrite_module (shared)
HTTP/1.1 301 Moved Permanently
Date: Wed, 20 Dec 2017 08:57:28 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Location: http://111.com/
Content-Type: text/html; charset=iso-8859-1
Apache的访问日志
Apache的访问日志记录有两钟类型common,combined
打开配置文件
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/httpd.conf
//搜索LogFormat
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
common日志的格式
192.168.176.1 - shuai [20/Dec/2017:15:40:50 +0800] "GET / HTTP/1.1" 200 7
127.0.0.1 - - [20/Dec/2017:15:59:23 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 401 -
127.0.0.1 - shuai [20/Dec/2017:15:59:45 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 -
第一项信息是远程主机的地址,即它表明访问网站的究竟是谁。
第二项是空白,用一个“-”占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的email地址或者其他唯一标识符。
第三项也是空白。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息是不会空白的。
第四项是请求的时间。
第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。
在上例中,METHOD是GET,其他经常可能出现的METHOD还有POST和HEAD。此外还有不少可能出现的合法METHOD,但主要就是这三种。
RESOURCE是指浏览者向服务器请求的文档,或URL。在这个例子中,浏览者请求的是“/”,即网站的主页或根。大多数情况下,“/”指向DocumentRoot目录的index.html文档,但根据服务器配置的不同它也可能指向其他文件。
PROTOCOL通常是HTTP,后面再加上版本号。版本号或者是1.0,或者是1.1,但出现1.0的时候比较多。我们知道,HTTP协议是Web得以工作的基础,HTTP/1.0是HTTP协议的早期版本,而1.1是最近的版本。当前大多数Web客户程序仍使用1.0版本的HTTP协议。
第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。此处不准备给出状态代码的完整清单以及解释它们的含义,请参考相关资料了解这方面的信息。但一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。
第七项表示发送给客户端的总字节数。
combined日志格式
192.168.176.1 - - [20/Dec/2017:18:39:31 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
192.168.176.1 - - [20/Dec/2017:18:39:32 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
192.168.176.1 - - [20/Dec/2017:18:39:33 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
第一项信息是远程主机的地址。
第二项是空白,用一个”-“占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的email地址或者其他唯一标识符。
第三项也是“-”。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息是不会空白的。但是,对于大多数网站来说,日志文件的大多数记录中这一项仍旧是空白的。
第四项是请求的时间。
第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器收到的是一个什么样的请求。该项信息的典型格式是”METHOD RESOURCE PROTOCOL”,即”方法 资源 协议”。
RESOURCE是指浏览者向服务器请求的文档,或URL。在这个例子中,浏览者请求的是”/stats/awstats.pl?config=e800 “。
在上例中,METHOD是GET,其他经常可能出现的METHOD还有POST和HEAD。此外还有不少可能出现的合法METHOD,但主要就是这三种。
PROTOCOL通常是HTTP,后面再加上版本号。
第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。
第七项表示发送给客户端的总字节数。
第八项记录的是客户在提出请求时所在的目录或URL。大多数情况下,首页会是在httpd.conf中DocumentRoot 指令后面规定的那些类型和名字的web文件。
第九项表示客户端的详细信息,这样你就不难理解为什么有些网站能够在页面中显示你的IP、OS、Browser了。
更改日志格式
打开虚拟主机配置文件
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/httpd.conf
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
参考:
访问日志不记录静态文件
网站上的一些静态文件。比如:图片,css,js 访问时可以不用记录日志
访问日志不记录静态文件配置文件
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/123.com-access_log" combined env=!img
以.gif , .jpg , .png , .bmp , .swf , .js , .css结尾的URI请求,添加一个img的标签。并不记录在访问日志文件里。
设置访问日志不记录静态文件:
打开虚拟主机配置文件
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
# <Directory /data/wwwroot/111.com>
# <FilesMatch 123.php>
# AllowOverride AuthConfig
# AuthName "111.com user auth"
# AuthType Basic
# AuthUserFile /data/.htpasswd
# require valid-user
# </FilesMatch>
# </Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
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
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined env=!img
</VirtualHost>
把以.gif , .jpg , .png , .bmp , .swf , .js , .css结尾的URI请求,添加一个img的标签。并不记录在访问日志文件里。
保存退出,检查配置文件语法并重新加载
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -t
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl graceful
输入两个访问,一个是以.jpg结尾的,一个是以.jpg1结尾的。(两文件都不存在,状态码显示404)
[root@ma-1 ~]# curl -x127.0.0.1:80 111.com/ahdj.jpg -I
HTTP/1.1 404 Not Found
Date: Thu, 21 Dec 2017 07:40:32 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
[root@ma-1 ~]# curl -x127.0.0.1:80 111.com/ahdj.jpg1 -I
HTTP/1.1 404 Not Found
Date: Thu, 21 Dec 2017 07:40:38 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
查看日志记录:
[root@ma-1 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
192.168.176.1 - - [20/Dec/2017:18:38:29 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.176.1 - - [20/Dec/2017:18:38:33 +0800] "GET / HTTP/1.1" 200 7
192.168.176.1 - - [20/Dec/2017:18:38:35 +0800] "GET / HTTP/1.1" 200 7
127.0.0.1 - - [20/Dec/2017:18:39:22 +0800] "HEAD
HTTP://www.example.com/
HTTP/1.1" 301 - "-" "curl/7.29.0"
127.0.0.1 - - [20/Dec/2017:18:39:25 +0800] "HEAD
HTTP://www.example.com/
HTTP/1.1" 301 - "-" "curl/7.29.0"
127.0.0.1 - - [20/Dec/2017:18:39:28 +0800] "GET
HTTP://www.example.com/
HTTP/1.1" 301 223 "-" "curl/7.29.0"
192.168.176.1 - - [20/Dec/2017:18:39:31 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
192.168.176.1 - - [20/Dec/2017:18:39:32 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
192.168.176.1 - - [20/Dec/2017:18:39:33 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
127.0.0.1 - - [21/Dec/2017:15:40:38 +0800] "HEAD HTTP://111.com/ahdj.jpg1 HTTP/1.1" 404 - "-" "curl/7.29.0"
只记录了以.jpg1结尾的访问。
访问日志的切割
日志一直记录,总有一天会把整个磁盘占满,所以对日志做一个自动切割,并且删除掉老的日志文件,就很有必要了。
Apache是自己带有日志切割命令的。
Apache为日志切割带了两种方法:cronolog , rotatelogs
apache的日志是可以自动切割的。
方法一: 使用 cronolog 为每一天建立一个新的日志
CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined
也可以按小时
CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined
方法二:使用 rotatelogs 每一天记录一个日志
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
每小时
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d%H.log 3600" combined
再看apache rotatelogs语法
rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
选项
-l
使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。所以一定要加上-l 否则出现的日志时间和实际时间是相差8小时的。
logfile
它加上基准名就是日志文件名。如果logfile中包含”%”,则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单位的”.nnnnnnnnnn”后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime
日志文件滚动的以秒为单位的间隔时间。
offset
相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数应为”-300″。
filesizeM
指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。
日志切割的配置文件:
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img
用Apache自带的日志切割命令(/usr/local/apache2.4/bin/rotatelogs)以当前系统的时间为准(-l)就是中国时区(CST),不加-l 就以美国时区(UTC)为准,指定日志名字(logs/123.com-access_%Y%m%d.log)指定切割时间(86400),每天一切割,默认单位是秒。
为Apache设置访问日志切割:
编辑虚拟主机配置文件:
[root@ma-1 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
# <Directory /data/wwwroot/111.com>
# <FilesMatch 123.php>
# AuthType Basic
# AuthUserFile /data/.htpasswd
# require valid-user
# </FilesMatch>
# </Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
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
ErrorLog "logs/111.com-error_log"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log" combined env=!img
</VirtualHost>
保存退出
检查配置文件语法并重新加载配置文件
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@ma-1 ~]# /usr/local/apache2.4/bin/apachectl graceful
curl连接一个网页:
[root@ma-1 ~]# ls /usr/local/apache2.4/logs/
[root@ma-1 ~]# curl -x127.0.0.1:80 111.com/1.php -I
HTTP/1.1 404 Not Found
Date: Thu, 21 Dec 2017 08:33:15 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
[root@ma-1 ~]# curl -x127.0.0.1:80 111.com/ahdj.jpg1 -I
HTTP/1.1 404 Not Found
Date: Thu, 21 Dec 2017 08:33:21 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
[root@ma-1 ~]# ls /usr/local/apache2.4/logs/
切割日志做到了,接下来就是要定期删除日志文件。通过添加linux系统任务计划,由cron命令来完成。
参考论坛:
配置静态元素过期时间
浏览器去访问网站时会把静态文件(图片,css , js)默认缓存在电脑里。这样下次访问时就不用再去远程下载了。缓存多长时间?浏览器会有自己的机制,清空缓存。或者在远程服务器端可以设置。
服务器通过expires模块可以定义失效时间。
服务器定义静态元素过期时间配置:
<IfModule mod_expires.c>
ExpiresActive on //打开该功能的开关
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
这是expires模块,开关(ExpiresActive on ),为某些类型的静态元素配置过期时间,gif 的时间为1天( ExpiresByType image/gif “access plus 1 days”),png的一天(ExpiresByType image/png “access plus 24 hours”),css的两小时( ExpiresByType text/css “now plus 2 hour”)
打开网站(111.com/logo.png),这是会显示304
在服务器段配置元素过期时间:
编辑虚拟主机配置文件:
[root@ma-1 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
# <Directory /data/wwwroot/111.com>
# <FilesMatch 123.php>
# AllowOverride AuthConfig
# AuthName "111.com user auth"
# AuthType Basic
# AuthUserFile /data/.htpasswd
# require valid-user
# </FilesMatch>
# </Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
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
ErrorLog "logs/111.com-error_log"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
这是一个模块,先看这个模块文件有没有打开
[root@ma-1 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expires
在主配置文件中加载模块
[root@ma-1 111.com]# vim /usr/local/apache2.4/conf/httpd.conf
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
检查配置文件语法是否错误并重新加载
[root@ma-1 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@ma-1 111.com]# /usr/local/apache2.4/bin/apachectl graceful
这是在访问网站(111.com/logo.png)
在curl里也能反映出来
[root@ma-1 111.com]# curl -x127.0.0.1:80 111.com/logo.png -I
HTTP/1.1 200 OK
Date: Thu, 21 Dec 2017 14:46:37 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Last-Modified: Thu, 21 Dec 2017 14:12:26 GMT
ETag: "1914-560da4a1b6680"
Accept-Ranges: bytes
Content-Length: 6420
Cache-Control: max-age=86400
Expires: Fri, 22 Dec 2017 14:46:37 GMT
Content-Type: image/png