任务列表:
11.16/11.17 Apache默认虚拟主机
11.18 Apache用户认证
11.19/11.20 域名跳转
11.21 Apache访问日志
11.22 访问日志不记录静态文件
11.23 访问日志切割
11.24 静态元素过期时间
11.16/11.17 Apache默认虚拟主机
11.16.1 什么是虚拟主机
- 一台服务器可以建立多个网站。
- 虚拟服务器就是用来起到管理多个网站的作用。
- 通过域名访问来指定虚拟服务器所管理的网站。
11.6.2 什么是默认虚拟主机
- 域名解析指向的IP访问服务器时,就会访问到默认虚拟主机
11.6.3 host概念
- windows的host文件路径:c:/windows/system32/drivers/etc/hosts
- host文件格式:IP 域名
- 一个IP可以对应多个域名,用空格分开,只要不回车就算同一行。
- 当一个域名对应多个IP时,最上边的配置生效。
- 当访问hosts中的域名时会直接转到所对应的IP上,而不去访问DNS服务器对域名进行解析。
11.6.4 如何管理虚拟主机
1, 开启虚拟主机配置文件
- 如果不设置虚拟主机,则会通过IP去访问默认虚拟主机。
- 默认虚拟主机配置文件内打开二级配置
- 当启动虚拟主机后将以虚拟主机配置为主,原来的主配置文件的服务器名将被虚拟主机覆盖
- 虚拟主机配置文件内的第一组配置成为新的默认虚拟主机。访问IP的任何域名都会指向这个配置。
搜索Virtual hosts
2,虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
- 该文件内可以配置多个虚拟主机
- 每个主机的配置以<VirtualHost 域名:端口>开始,结束
- ServerAdmin 配置管理者邮箱可以删除
- DocumentRoot 配置网站的根目录
- ServerName 虚拟主机名,通过这个域名来访问虚拟主机。只能有一个。
- ServerAlias 网站别名,可以有多个。当虚拟主机和默认虚拟主机的域名冲突,以虚拟主机配置文件为准。
- ErrorLog 错误日志文件
- CustomLog 访问日志文件
11.6.5 测试
- curl工具
curl -xIP:port servername
通过IP和域名来访问index.php的内容。
11.18 Apache用户认证
用户认证的目的在于:
对敏感站点或页面单独加密以提高安全性
11.18.1对整个站点进行加密
- 在虚拟主机配置里加入以下语句
<Directory /data/wwwroot/111.com> //指定需要认证的目录
AllowOverride AuthConfig //认证开关,有这行就启动认证
AuthName "111.com user auth" //自定认认证名称,作用不大
AuthType Basic //认证类型,一般为Basic
AuthUserFile /data/.htpasswd //指定认证文件所在位置。认证文件里包含了用户和密码
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
11.8.2 对单独页面进行加密
- 在虚拟主机配置里加入以下语句
<FilesMatch 1.php> //指定需要认证的文件
AllowOverride AuthConfig //认证开关,有这行就启动认证
AuthName "111.com user auth" //自定认认证名称,作用不大
AuthType Basic //认证类型,一般为Basic
AuthUserFile /data/.htpasswd //指定认证文件所在位置。认证文件里包含了用户和密码
require valid-user //指定需要认证的用户为全部可用用户
</FilesMatch>
- 看起来和认证目录相似
11.8.3 建立认证文件
/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd 用户名
11.8.3 测试
1,web测试
- 输入加密站点域名时,会要求输入用户名和密码。说明加密成功。
2,curl测试
curl -127.0.0.1:80 111.com
- 提示401表示需要用户认证
- -I 返回头部信息。主要用来看状态码,200表示正常登录,401表示需要认证。
- curl输入用户名和密码
curl -x 192.168.19.131:80 -usapwin:47721852 111.com
11.19/11.20 域名跳转
域名跳转的意义:网站需要新的域名,又不想失去记忆原域名的客户,所以需要域名跳转。
- 主域名将会有更高的权重,用以被搜索引擎抓取。
- 跳转的域名会使用301状态码,表示永久跳转。标记有永久跳转的页面将会降低权重。
11.19.1如何进行域名跳转
在虚拟主机配置文件里添加以下语句
<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>
关于rewrite规则的解释
^/(.*)$
表示以/开始后边所有的内容- $1就是指前边的这个分段
- [R=301,L]表示状态码为301,L表示只跳一次
11.19.2 测试
1,检查rewrite模块是否打开
/usr/local/apache2.4/bin/apachectl -M |grep rewrite
2,如果没有打开,去/usr/local/apache2.4/conf/httpd.conf
里打开
3,使用curl测试
- 返回状态码301即表示跳转设置成功。
11.21 Apache访问日志
11.21.1访问日志的位置
/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
文件里定义了虚拟主机的访问日志位置
- 这里的logs指的是
/usr/local/apache2.4/logs/
目录 - common是访问日志的格式,可以在主配置文件中定义。
11.21.2 访问日志的格式
/usr/local/apache2.4/conf/httpd.conf
里记录了访问日志的格式
- 跟据需要选择使用combined还是common
- %h 来源IP,是谁访问了网站
- %l %u 都是指用户
- %t 时间
- %r request行为
- %s 状态码
- %b 大小
- Referer 访问这个站点的前一个网站信息,就是指你从哪里找到这个网站的。
- User-Agent 访问网站的媒介信息。指你通过什么手段来访问网站的,是web页面还是通过curl之类的。
11.22 访问日志不记录静态文件
网站大多元素为静态文件,如图片、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
第二步,在访问日志的common后边追加env=!img,排除带有标签的元素。
- img标签是自己定义的
- 记录这些无意义的元素会增加服务器负载,所以应该排除。
11.23 访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
11.23.1切割访问日志的方法
CustomLog “|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400”
|/usr/local/apache2.4/bin/rotatelogs
是apache自带的日志切割工具- -l 是指使用本机所在的时区作为时间参数的基准。默认为UTC时区。
- 86400是一天换算成秒的数值。
11.23.2 做了切割还应该写一个计划任务,把到期的日志删除以节省磁盘空间。
11.24 静态元素过期时间
- 浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了
11.24.1 服务器可以通过expires模块来定义元素的过期时间
/usr/local/apache2.4/bin/apachectl -M |grep expire
查看expire模块是否打开
11.24.2设置静态元素过期时间
添下以下内容到虚拟服务器配置中
<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>
11.24.3 测试
curl -x127.0.0.1:80 111.com/1.png -I
直播笔记
apache的另一种安装方法
- 下载apr-1.6、apr-util-1.6以及httpd-2.4,分别解压三个源码包
- 把apr-1.6.3 放到httpd源码包的/srclib/下,改名apr
- 把apr-util-1.6.1 放到httpd源码包的/srclib/下,改名apr-util4
- 编译参数./configure --prefix=/dir/ --enable-so --enable-mpms-shared=all --with-mpm=event --enable-mods-shared=most --with-included-apr
说明:这里的/dir/为apache安装路径,根据需求定目录