LAMP 2

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

  1. 编辑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规则,当满足上面的条件时,这条规则才会执行

  1. 确保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看到图片过期时间

猜你喜欢

转载自blog.csdn.net/nongfuchui/article/details/84828823