9. Apache 默认虚拟主机
Apache配置文件
为什么能通过htdocs访问到1.php index.html,就是因为以下参数定义了网站的根目录
他的域名就是靠以下定义的(指任何内容都可以访问他)
host的目的就是允许临时访问到一个服务器上去(用于DNS 还未生效的情况下去)
****如何定义windows下的host
&记事本下编辑host文件(c:\windows\System32\drivers\etc)
&编辑host文件如下,注在管理员权限下修改并保存
这样ping到网址会直接落到之前的IP 上:192.168.88.141
同时我们看conf/http.conf 中我们会看到如下图,这称之为apache的默认主机,任何一个域名,只要只要指向这个ip都会访问到这个站点,这个站点就叫默认虚拟主机
9.1 定义虚拟主机配置文件(可以定义多个server name)--一但定义了虚拟主机配置,原有的httpd.conf的servername和host都会失效
& apache配置文件中搜索/extra 找到Virtual hosts
去掉"#"
& 打开二级配置文件/ 虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
配置文件下,每一个virtual host都代表一个主机,为了区分不同的域名访问路径,所以打开虚拟主机并编辑虚拟主机配置文件
ServerAdmin--定义管理用户邮箱,实验环境可以删掉
DocumentRoot---来定义网站的根目录
ServerAlias--确保网站可以多域名访问,访问的内容是一样,可以写多个
customlog--指定访问日志路径
更改为(定义一个网站最核心的两个就是DocRoot路径以及ServerName 域名)
& 创建目录
mkdir /data/wwwroot/
mkdir /data/wwwroot/abc.com
mkdir /data/wwwroot/111.com
&在对应站点根目录下创建一个index.php
mkdir /data/wwwroot/abc.com/index.php
同样在111.com下面也定义一个index.php
定义之后检验一下是否有错
/usr/local/apache2.4/bin/apachectl -t
加载
/usr/local/apache2.4/bin/apachectl graceful
如下图,第一个为默认虚拟主机,任何域名只要解析过来,配置文件中没有定义这个servername,他会搜索所有的配置段,发现访问的域名并没有在配置里面出现,那么她就会走默认虚拟主机配置文件
#### Curl 的用法
10. Apache 的用户认证
此认证是指你打开一个页面,什么都不显示,直接弹出一个对话框让你输入用户名和密码,当你输入对了才能访问网页的内容
10.1 如何配置Apache 用户认证(虚拟主机测试环境)
&进入虚拟主机编辑模式
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
将虚拟主机更改如下
&生成用户认证密码
usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd fred
查看密码时候会发现密码已加密,因为命令输入时加入了m(md5加密)
& 从新加载-t graceful 进行测试
&curl -x127.0.0.1:80 www.111.com之后出现报错401
&当然也同样可以在window下测试,但要先确保把111.com加入hosts中
& 同时可以在linux实验中直接命令中输入用户名密码 curl -x127.0.0.1:80 -ufred:diyue0228 111.com,进而得到状态码200(正常)
10.2 针对单个文件进行认证
下图指针对于所有关于admin.php的访问会进行认证
&对httpd.conf进行更改,两处删除两处添加,注销掉原有的directory
& 从新加载-t graceful 进行测试
&为了配合试验需求,配置一个123.php
vim /data/wwwroot/111.com/123.php
&实验室,123.php访问就会报错
输入用户名密码后就可以访问
11. 域名跳转
& 在测试之前要确定是否加载rewrite模块
/usr/local/apache2/bin/apachectl -M|grep -i rewrite
因为我们在编译的时候指定的是most, 所以这个模块一定是存在的,如果已加载的模块里没有rewrite,需要进入httpd.conf中enable rewrite这个选项 /usr/local/apache2.4/conf/httpd.conf
&&&&状态
301: 永久重定向 (增加权重)
302: 临时重定向
401: 用户名密码验证错误
200:用户名密码验证正确
404:无法访问
403:授权关闭不允许访问
域名跳转 Brief Steps
-
编辑vhost参数,输入域名跳转配置
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
RewriteEngine on //打开rewrite功能
RewriteCond %{HTTP_HOST} !^www.123.com$ //定义rewrite的条件,主机名(域名)不是www.123.com满足条件
RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行
-
确保rewrite模块加载
12. Apache 访问日志
虚拟主机访问日志的内容实际上是自己定义的,定义于配置文件vhost.conf中,这里所谓的logs是指/usr/local/apache2.4/logs
下图访问日志中‘head’是指通过curl访问, get是指加了-I参数
### 如何定义日志格式?
打开主配置文件 /usr/local/apache2.4/conf/httpd.conf
可以将配置文件中的‘common’改成‘conbined’
以上提供了两种日志格式 默认的是用common
h=来源ip, l/u=用户/密码, t=时间,r=request 行为, s=状态码, b =大小
& 相较于common来说 combine多了一个referer 和user agent
referer 是指通过什么网站跳到了当前网站
user agent 指用户代理,是指通过什么途径访问的此网站
13. Apache 访问日志不记录静态文件
如果使用的是chrome/firxfox浏览器,有一个工具可以用来查看网站的访问元素有哪些。F12
列表中,每访问一个元素就会记录日志,但是这样会导致日志内容过大,所以有必要把这些排除掉--访问日志不记录指定文件
同样定义vhost配置文件,customerlog上面,env=!img是指只要是满足上述条件的 都不会记录到日志里
13. Apache 访问日志切割
日志切割要用带apache自带的一个切割工具 "rotatelogs"; “-l”目的是让他以当前系统的时间为准而不是美国时间utc; " _%Y%m%d.log 86400" 意为指定时间为天、秒
同样日志切割要配合计划任务进行定期删除, 这样才有切割的意义
日志切割的目的是为了防止磁盘写满,同时划分日期便于管理
14. 静态元素过期时间
简单说,就是设定定期清除缓存图片,(再次访问此图片时显示状态码304就是意味着图片已缓存无需再次加载),这时候需要一个新的模块,expires
& 下述定于与配置文件中的定义了各类图片格式的过期时间 而 ExpiresActive on 定义了模块的开启
& 同样要检测expires这个模块是否打开,如果没有打开,继续编辑主配置文件,将其打开,然后重新加载
/usr/local/apache2.4/bin/httpd -M | grep expires
tips, control +F5 可以强制刷新, 清空本地缓存
在网页中可以通过F12,linux中可以通过curl -I看到图片过期时间