Apache虚拟主机测试

一、虚拟机主机简介

   
部署多个站点,每个站点,希望用不同的域名和站点目录,或者是不同的端口,或不同的ip,就需要虚拟主机功能。简单的说一个http服务要配置多个站点,就需要虚拟主机。(一句话一个http服务要配置多个站点,就需要虚拟主机)

二、虚拟主机分类

  1. 基于域名
  2. 基于端口
  3. 基于ip

所谓的基于XX,就是靠XX来区分不同的站点,支持各种混合,N多个虚拟主机。

三、基于域名虚拟主机实例

域名              站点
www.qzl.com      /var/html/www    
blog.qzl.com     /var/html/blog
bbs.qzl.com      /var/html/bbs       

1.创建虚拟主机目录

[root@A extra]# mkdir -p /var/html/{www,blog,bbs}
[root@A extra]# touch /var/html/{www,blog,bbs}/index.html
[root@A www]# for name in www blog bbs ;do echo "http://$name.qzl.com" >/var/html/$name/index.html;done

[root@A www]# for name in www blog bbs ;do cat /var/html/$name/index.html;done
http://www.qzl.com
http://blog.qzl.com
http://bbs.qzl.com

2.修改配置文件

[root@A conf]# grep ^Include httpd.conf 
Include conf/extra/httpd-vhosts.conf    #打开加载,加载虚拟主机配置文件

[root@A extra]# vim httpd-vhosts.conf
<VirtualHost *:80>
    ServerAdmin 83891*64@qq.com      #配置管理员邮箱
    DocumentRoot "/var/html/www"      #配置虚拟主机目录
    ServerName www.qzl.com          #配置域名
    ErrorLog "logs/www-error_log"      #配置错误日志路径
    CustomLog "logs/www-access_log" common   #配置访问日志路径
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin 83891*64@qq.com      #注意,这里应该是你管理员的有效的邮箱,而不应该打掩码的,
    DocumentRoot "/var/html/blog"
    ServerName blog.qzl.com
    ErrorLog "logs/blog-error_log"
    CustomLog "logs/blog-access_log" common
</VirtualHost>

<Directory /var/html>
    Options FollowSymLinks #FollowSymLinks表示禁止使用符号链接,Indexes表示允许目录浏览
    AllowOverride None    #表示禁止用户对目录配置文件(.htaccess进行修改)重载
    Order allow,deny     #以allow优先处理,没有明确说明允许的话都将拒绝访问
    allow from all      #允许所有的访问
</Directory>

3.修改本地的hosts文件(用于DNS解析)

未分类

4.优雅启动apache

[root@A apache]# /application/apache/bin/apachectl graceful
httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.7 for ServerName
解决办法:
将httpd.conf 里第99行,修改ServerName 127.0.0.1:7

说明:这里可以用restart重启,但是用graceful更好,这个参数可以在处理完毕请求后再重新启动,即重启时不会强行中断用户访问,所以建议用graceful这个参数

5.Apache日志

1) 通用日志格式(CommonLog Format)
  组合日志格式(CombinedLOG Format)

2) 安装日志轮询工具cronolog(链接:https://pan.baidu.com/s/1xZBQbgahwCdv8l47kWz2LQ 提取码:7zd3 )

cd /home/king/tools/
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar xf cronolog-1.6.2.tar.gz 
cd cronolog-1.6.2
./configure 
make 
make install
cd /usr/local/sbin/
pwd
ll /usr/local/sbin

查看 ll /usr/local/sbin/ 可以看到俩文件cronolog 和cronosplit权限都是755 的权限

说明:cronolog轮询日志的正确写法,被轮询的日志路径要写全路径这是大多数网站的常规配置方法(按天记录日志,日志不会自动覆盖)修改配置文件日志vim httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin 83891*64@qq.com
    DocumentRoot "/var/html/www"
    ServerName www.qzl.com
    ErrorLog "|/usr/local/sbin/cronolog /application/apache/logs/www-error_%Y%m%d.log" 
    CustomLog "|/usr/local/sbin/cronolog /application/apache/logs/www-access_%Y%m%d.log" combined
</VirtualHost>

四.举例子

例1:apache不记录图片的日志

答:因为统计日志PV时一个页面才算一个PV,而图片,JS,CSS等只是图片的元素,如果记录在日志里,然后按日志行进行计算PV就不准确了,所以可以考虑不记录图片等日志。

<FilesMatch ".(css|js|gif|jpg|ico|swf)">
    setEnv IMAG 1
</FilesMatch>

CustomLog "|/usr/local/sbin/cronolog /application/apache/logs/www-access_%Y%m%d.log" combined  env=!IMAG

例2:RS服务器不记录负载均衡健康检查日志

虚拟主机不记录负载均衡向下健康检查文件的日志(check.txt)

SetEnvIf Request_URI "^/check.txt$" dontlog
CustomLog "|/usr/local/sbin/cronolog /application/apache/logs/www-access_%Y%m%d.log" combined  env=!dontlog

例3:日志统计

awk '{print $1}' 文件名字|sort|uniq -c|sort -rn |head -10

庖丁解牛,高大上的日志统计命令:

awk '{++S[$1]} END {for(key in S) print S[key],key}' 文件名字|sort -rn -k1|head -10

首先++S是一个名字为S的数组,for循环key是在名字为S的数组中取值,然后按照key的默认格式打印出来,在sort进行排序。