LAMP架构 2

Apache默认虚拟主机

  • 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
  • 虚拟主机,可以理解成httpd服务下面跑了多个网站或者域名。
  • 概念;域名(主机名) 、DNS、解析域名、hosts
  • 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

 

定义windows定义hosts

C:\windows\System32\drivers\etc\hosts

定义一个ip,定义多个域名,用域名访问ip

 

在浏览器上输入www.abc.com www.123.com 111.com就可以访问的,但是并没有在apache的配置文件中去定义它,仅仅定义了ServerName www.example.com:80,apache的默认主机。任何域名,只要指向这个IP地址,都会访问到这个站点(默认虚拟主机)

 

 

设置虚拟主机

如果想设置多个域名指向多个网页就需要设置虚拟主机

编辑配置文件 vi /usr/local/apache2.4/conf/httpd.conf

开放虚拟主机去掉#号注释 Include conf/extra/httpd-vhosts.conf

 

编辑虚拟主机配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 

修改

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com     //定义管理员的邮箱。可以删除
    DocumentRoot "/data/wwwroot/abc.com"      //定义网站的根目录路径 (核心)
    ServerName www.abc.com     // 指定域名。这里只支持写一个。(核心)
    ServerAlias 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
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

创建目录

mkdir /data/wwwroot/ mkdir /data/wwwroot/abc.com mkdir /data/wwwroot/111.com

 

编辑一个php文件

vim /data/wwwroot/abc.com/index.php //写入<?php echo "abc.com";

?> vim /data/wwwroot/111.com/index.php //写入 <?php echo"111.com";

?>

 

 

curl命令的用法

curl -x192.168.217.129:80 abc.com //指定到192.168.244.128访问abc.com 。它是虚拟主机配置文件中的第一个主机,也就是默认虚拟主机。

curl -x192.168.217.129:80 www.example.com //则会访问到第二个虚拟主机 111.com

-u:用户:密码

curl -x127.0.0.1:80 -ulioo:12345 111.com

-i 状态码

curl -A “123123” //指定用户代理USER_AGENT

curl -e “http://www………..” //指定网址代理 referer

curl -x 相当于忽略hosts // 指定主机host

curl ……………. -I // 查看状态码

200正常         301永久重定向        302临时重定向        401用户认证           403禁止访问           404错误页面

 

总结1:在主配置文件中/usr/local/apache2.4/conf/httpd.conf打开了虚拟主机配置文件Include conf/extra/httpd-vhosts.conf(去掉注释就是打开),虚拟主机配置文件生效后主配置文件中定义的ServerNmae 和DocumentRoot就会失效。 默认打开就是虚拟主机中的网址

总结2:虚拟主机配置文件一旦打开,可以定义很多的virtuaHost。每个virtuaHost都会有一个DocumentRoot和ServerName(可以写多个)。每一个virtuaHost都代表一个站点,都是一个虚拟主机。默认虚拟主机比较特殊,任何域名解析到这个IP上都会访问这个默认虚拟主机的ServerNmae。

 

Apache用户认证

 

需求1:打开网址让你输入用户名密码才能登陆

 

1.编辑配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 

修改第二个host

 

 <VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com 
    <Directory /data/wwwroot/111.com> //指定认证的目录
        AllowOverride AuthConfig   //这个相当于打开认证的开关
        AuthName "111.com user auth"  //自定义认证的名字,作用不大
        AuthType Basic  //认证的类型,一般为Basic
        AuthUserFile /data/.htpasswd  //指定密码文件所在目录
        require valid-user //指定需要认证的用户为全部可用用户
    </Directory> 
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

 

2.创建密码文件

/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd lioo

-c表示创建 -m表示使用md5的加密类型 /data/.htpasswd表示密码文件所在位置 zchuny表示用户名,这里可不写useradd 创建第二个用户是就不用加-c 了

cat /data/.htpasswd //这里可以看到输入。冒号左边是用户名,右边是加密字符串

 

3.重新加载服务

/usr/local/apache2.4/bin/apachectl -t 检查错误 /usr/local/apache2.4/bin/apachectl graceful 重新加载

 

测试

 

浏览器输入网址111.com (需要把111.com绑定到windows的hosts里)会提示需要进行身份验证。输入之前设置的账号密码

 

 

curl -x127.0.0.1:80 111.com -I 显示401需要密码认证

 

需求2:针对单个文件进行认证。

1.修改第2台虚拟主机修改为以下内容

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com

# <Directory /data/wwwroot/111.com>

<FilesMatch 123.php> //匹配到123.php文件后才会去执行下面的操作

AllowOverride AuthConfig

AuthName "111.com user auth"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

</FilesMatch>

# </Directory>

ErrorLog "logs/111.com-error_log"

CustomLog "logs/111.com-access_log" common

</VirtualHost>

2.重新加载

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

 

3. 编辑 一个查看需要密码的php文件

vim /data/wwwroot/111.com/123.php //写入

<?php

echo "123.php";

 

发现不用账号密码也显示200正常

但是访问111.com/123.php 就又显示401需要账号密码了

 

域名跳转

301永久重定向 302临时重定向

 

1. 修改虚拟主机配置文件中编辑第二台虚拟主机

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com  2111.com.cn    //2111.com.cn写到windows的hosts里


    <IfModule mod_rewrite.c>      //需要mod_Rewrite模块支持
        RewriteEngine on   //打开Rewrite功能
        RewriteCond %{HTTP_HOST} !^111.com$    //定义Rewrite的条件,主机名(域名)不是www.123.com的满足条件 
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]    //定义Rewrite规则,当满足上面的条件时,这条规则才会执行 。L表示只跳一次。
     </IfModule>  
 
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

 

 

2. 测试之前检查apache是否加载了rewrite模块,如果没有加载。可以在配置文件中打开它,将#LoadModule rewrite_module modules/mod_rewrite.so这行的#号去掉即可。 再次加载配置文件查看是否已加载

 

3.重新加载

加载前需要把2111.com.cn绑定到windows的hosts里

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

 

4. 访问 curl -x127.0.0.1:80 2111.com.cn -I 显示301

 

5.状态码含义

404:表示页面不存在

301:永久跳转,提升权重

302: 临时跳转,不会增加权重

401:用户名密码验证。验证不对是401,验证正确为200

403:在配置文件中granted表示授权,允许访问。状态码为200

denied表示不允许访问。这是会出现403

403:修改配置文件vi /usr/local/apache2.4/conf/httpd.conf 中granted表示授权,允许访问。状态码为200

denied表示不允许访问。这是会出现403

<Directory /> AllowOverride none Require all granted </Directory>

 

Apache访问日志

1. 访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题。比如有攻击时,是可以通过查看日志看到一些规律。

2. 之前操作的第2台虚拟主机的访问日志是定义在/usr/local/apache2.4/logs/目录下,可以看到111.com-access_log(访问日志)和111.com-error_log(错误日志)。通过cat来查看访问日志,可以看到其中”HEAD”是因为使用curl命令加上-I后只出现状态码而产生的。而GET则是使用curl不加-I选项后产生的。还可以看到来源IP ,访问时间,访问的域名,行为,HTTP的版本。状态码。

3. 定义日志格式

在apache的主配置文件/usr/local/apache2.4/conf/httpd.conf中,

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ///User-Agent表示用户代理,用户通过浏览器获取到网站的内容 Referer记录你的浏览器上次访问的网址是什么。 LogFormat "%h %l %u %t \"%r\" %>s %b" common //默认使用这个

4.在更改虚拟主机配置文件将CustomLog "logs/111.com-access_log" common

//最后的common改为combined

5.加载配置文件

6.再次curl后去查看访问日志的格式已经发生了变化

 

访问日志不记录静态文件

网站静态文件,如图片、css、js等元素可以不用记录

 

1. 修改虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

</IfModule>

ErrorLog "logs/111.com-error_log"

SetEnvIf Request_URI ".*\.gif$" img //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   //env=!img表示将img标签的全部排除,不用进行记录

</VirtualHost>

 

2. 重新加载配置文件

/usr/local/apache2.4/bin/apachectl graceful

 

在访问jpg png 等图片就不会记录日志了

3. 在111.com/目录下上传一张图片

curl -x127.0.0.1:80 111.com/timg.jpg -I 显示200日志里也不会记录

将配置文件中加入的 env=!img删除,重新加载配置文件后,

 

将配置文件中加入的 env=!img删除,重新加载配置文件后,再去访问那个图片就可以在访问日志中看到。在访问日志中看到

 

 

 

访问日志切割

 

1. 修改虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

修改最后一行

CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

//%y%m%d以年月日命名,86400秒即1天切割一次。rotatelogs是apache的切割日志工具。

 

2. 重新加载配置文件

/usr/local/apache2.4/bin/apachectl graceful

 

3. curl -x127.0.0.1:80 111.com/123.php

去访问网址下php得文件(其它图片之前禁止记录日志了)之后可以看到在 ls /usr/local/apache2.4/logs/ 目录下生成一个带有当前日期的日志文件了。以后只要到了00:00时就会重新生成一个日志文件了。

 

4. 做一个任务计划,将超过一定时间的文件删除掉,因为日志分割只是分成了多个文件方便查看 但是还是会将磁盘写满

 

 

 

配置静态元素过期时间

 

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了

1. 修改虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

添加

<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>

 

 

2. 打开主配置文件的expires模块

vi /usr/local/apache2.4/conf/httpd.conf 去掉#号注释

 

重新加载配置文件 检查模块是否打开

/usr/local/apache2.4/bin/apachectl graceful

/usr/local/apache2.4/bin/apachectl -M |grep expires

 

4.上传一个log.jpg的图片 /data/wwwroot/111.com/log.jpg

重启配置文件 /usr/local/apache2.4/bin/apachectl graceful

最后访问这个图片 curl -x127.0.0.1:80 111.com/log.jpg -I

DaTa;当前时间

Expires : 过期时间

cache-control:缓存多少秒

没有打开expires模块看不到这些信息的

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值