一、Apache默认虚拟主机
二、Apache用户认证
三、域名跳转
四、Apache访问日志
五、访问日志不记录静态文件
六、访问日志切割
七、静态元素过期时间
八、扩展
一、Apache默认虚拟主机
虚拟主机指的是在单一机器上运行多个网站,每一个网站实际就是一个虚拟主机。虚拟主机可以"基于IP",即每个IP一个站点; 或者"基于名称", 即每个IP多个站点。也可以是基于端口。目前常用的是基于名称的虚拟主机。
如果在包含最具体匹配IP地址和端口组合的虚拟主机集中找不到匹配的ServerName或ServerAlias,则将使用与之匹配的第一个列出的虚拟主机。这个主机就是默认的虚拟主机。
1.测试默认虚拟主机的访问:
在本机添加hosts,路径(C:\Windows\System32\drivers\etc\hosts)
通过本机浏览器访问www.abc.com和www.123.com,均可正常访问默认主机的默认主页。因为当前Apache Web Server还没有其他的虚拟主机。所以都是定位到默认主机。
2.在apache全局配置文件httpd.conf中定义默认的虚拟主机、网站目录以及首页index.html(索引页)
2.1打开配置文件: vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost,去掉#
编辑虚拟主机配置文件:vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
//改为如下:(新增一个域名就是一个虚拟主机)
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com www.123.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com 2111.com.cn
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
文件各行信息:
vim
2.2.创建目录
2.3.在对应站点根目录下创建index.php
3.检查服务是否正确、重新加载
4.验证
二、Apache用户认证
有时候为满足特殊的安全需求,需要对网站或网站的特定页访问进行验证,然后才可以访问网站的相应内容,例如网站的后台管理页面,可以通过开启apache的用户认证功能来实现。
1.实现过程(以111.com为例)
1.1.修改/usr/local/apache2/conf/extra/httpd-vhosts.conf文件
<Directory /data/wwwroot/111.com>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
# </Directory>
1.2.创建用户与密码文件:-c选项是创建、-m选项是使用md5加密算法,user01是认证用户名
[root@Linux01 ~]# /usr/local/apache2/bin/htpasswd -c -m /data/.htpasswd user01
1.3.检验配置文件及重载
1.4 验证
浏览器验证:
命令行验证:
2.也可以对网站下的单个页面进行访问认证:(以111.com为例)
2.1 修改/usr/local/apache2/conf/extra/httpd-vhosts.conf文件
#<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>
2.2 在111.com下新建一个123.php
2.3 重新加载、验证
三、域名跳转
在用Apache做web服务器的时候,有的时候需要将输入的URL转换成另一个URL。这可以通过Apache的rewrite功能实现。
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于 Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
跳转是在别名中的其中一个域名跳转到现在的域名;(以www.example.com跳转到111.com为例)
1.在apache的全局配置文件中启用rewrite模块
[root@Linux01 ~]# vim /usr/local/apache2/conf/httpd.conf
#LoadModule rewrite_module modules/mod_rewrite.so //取消该句注释,开启rewrite功能
2.编辑/usr/local/apache2/conf/extra/httpd-vhosts.conf 虚拟主机文件
[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
添加这段:
<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
RewriteEngine on //打开rewrite功能
RewriteCond %{HTTP_HOST} !^111.com$ //定义rewrite的条件,主机名(域名)不是111.com满足条件
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则
才会执行
</IfModule>
代码301:表示永久跳转,降低原来域名的权重增加到新域名上;
代码302:表示临时跳转,不会降低原域名的权重。
3.测试配置文件及重载
4.验证(Windows下绑定hosts)
4.1 浏览器验证:跳转成功
访问111.com下的123.php时,也会跳转,而且域名后面不变:
4.2 命令行验证(-I只显示状态码,不显示信息)
四、Apache访问日志
Apache的访问日志是在虚拟主机子配置文件httpd-vhosts.conf中定义的,一个虚拟主机对应一个错误日志和访问日志。
1. [root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
虚拟主机日志查看(以111.com的访问日志为例)
[root@Linux01 ~]# ls /usr/local/apache2/logs
111.com-access_log abc.com-access_log access_log httpd.pid
111.com-error_log abc.com-error_log error_log
[root@Linux01 ~]# ls /usr/local/apache2/logs/111.com-access_log
/usr/local/apache2/logs/111.com-access_log
[root@Linux01 ~]# cat !$
cat /usr/local/apache2/logs/111.com-access_log
2.访问日志的格式定义在apache的全局配置文件/usr/local/apache2/conf/httpd.conf中
[root@Linux01 ~]# vim /usr/local/apache2/conf/httpd.conf
//通常用common级的日志,但是记录的内容比较简单;如需更详细的记录,可以开启combined级的日志记录 //combined级的日志记录:包含Referer信息:访问页面的上一级链接,User-Agent信息:用户代理,用户访问页面使用的工具:浏览器、curl等。
3.对虚拟主机开启combined级日志功能
[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
3.1 重新加载配置文件
[root@Linux01 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@Linux01 ~]# /usr/local/apache2/bin/apachectl graceful
4. 验证
[root@Linux01 ~]# cat /usr/local/apache2/logs/111.com-access_log
//重载配置文件后通过浏览器访问
//重载配置文件后通过命令行访问
五、访问日志不记录静态文件
apache的访问日志会记录网站每个文件被获取的信息,这样日志信息量会很大,我们排查日志的时候不容易筛选有用的记录。我们可以把静态文件的日志设置为不记录,提高我们排查日志信息的效率。
网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 。
1.编辑虚拟主机配置文件
[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
ErrorLog "logs/111.com-error_log"
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
2.验证
2.1 未重新加载:
[root@Linux01 ~]# cat /usr/local/apache2/logs/111.com-access_log //日志中保存了记录
2.2 重新加载配置文件:
[root@Linux01 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@Linux01 ~]# /usr/local/apache2/bin/apachectl graceful
[root@Linux01 ~]# cat /usr/local/apache2/logs/111.com-access_log //日志中未保存记录
2.3 2.jpg文件不存在,不能准确判断网站上的图片等静态文件记录是否能保存到日志文件,现在上传一张图片到111.com网站下进行测试
命令行访问测试:
浏览器访问测试:
[root@Linux01 111.com]# cat /usr/local/apache2/logs/111.com-access_log //访问日志
六、访问日志切割
随着网站访问量的增大,网站的访问日志文件也会变得很大,甚至有一天会把整个磁盘占满,为了保证磁盘空间不会被占满,方便日志的管理(如查询、备份、删除历史日志等。),我们需要对日志进行切割操作,可以以天为单位将日志独立切割出来,并删除老的日志文件 。
1. 在/usr/local/apache2/conf/extra/httpd-vhosts.conf配置文件下进行设定:
//%y%m%d以年月日命名,86400秒即1天切割一次。rotatelogs是apache的切割日志工具。-l 以当前系统时间切割,
默认是美国时间
CustomLog "|/usr/local/apache2/bin/rotatelogs -l logs/111.com-access_%y%m%d.log 86400" combined env=!img
2. 重新加载
3. 验证
4. 以后每天都会多出一个日志切割文件,记录对网站的操作记录;
设置一个cron计划,用来删除旧的日志文件,保证磁盘空间。
七、静态元素过期时间
浏览器访问网站,获取的图片、css等静态元素会保存在本地电脑缓存文件夹里,方便下次再此访问的时候提高访问速度。我们也可以在服务器端设置这些静态元素的过期时间,可以减网站的带宽压力。
在虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf里设定:是通过expires模块(定义失效时间)实现的。在编译apache的时候指定了参数mods=most,该模块已经编译进来。
1. 首先在apache全局配置文件里启用该模块
[root@Linux01 ~]# vim /usr/local/apache2/conf/httpd.conf
#LoadModule expires_module modules/mod_expires.so //取消注释
检查apache拓展模块:
2. 在虚拟主机配置文件中更改配置
[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
//增加该段配置
<IfModule mod_expires.c>
ExpiresActive on // 打开该功能的开关
ExpiresByType image/gif "access plus 1 days" //gif类型文件的失效时间是1天
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>
3.重新加载
4. 验证
4.1 命令行验证
4.2 浏览器验证
访问图片,状态码200
刷新:状态码变成304,说明已经缓存到本地,不再需要重新下载
八、扩展
apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370
apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960
apache只记录指定URI的日志 http://ask.apelearn.com/question/981
apache日志记录客户端请求的域名 http://ask.apelearn.com/question/1037
apache 日志切割问题 http://ask.apelearn.com/question/566