第十一章LAMP架构介绍(中)

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默认虚拟主机

• 一台服务器可以访问多个网站,每个网站都是一个虚拟主机

• 概念:域名(主机名)、DNS、解析域名、hosts

• 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

 

#windows的hosts文件,作用是让你临时访问到服务器上,适用于DNS还未生效

 

vim /usr/local/apache2.4/conf/httpd.conf    #搜索httpd-vhost,去掉#

 

#每一段VirtuallHost就是一个虚拟主机

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf #改为如下

<VirtualHost *:80>

    ServerAdmin  admin@aminglinux.com       # 定义管理员的邮箱,可以删掉    

    DocumentRoot "/data/wwwroot/abc.com"    #定义网站的根目录

    ServerName  abc.com             #定义域名(只能写一个)

    ServerAlias www.abc.com       #定义别名(可以写多个)

    ErrorLog "logs/abc.com-error_log"   #定义错误日志存放位置

    CustomLog "logs/abc.com-access_log" common   ##定义访问日志存放位置

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    ErrorLog "logs/123.com-error_log"   

    CustomLog "logs/123.com-access_log" common 

</VirtualHost>

 

/usr/local/apache2/bin/apachectl –t           #检测配置文件语法

/usr/local/apache2/bin/apachectl graceful   #重新加载配置文件

 

mkdir -p /data/wwwroot/www.abc.com  /data/wwwroot/www.123.com

#创建两个网站的目录

 

echo "zbc.com" > /data/wwwroot/www.abc.com/index.html 

  #给网站首页添加内容

echo "123.com" > /data/wwwroot/www.123.com/index.html

 

修改windows的hosts文件,增加一行

192.168.233.150   www.abc.com   www.123.com

 

curl命令用法

curl -x          #指定ip到指定的默认主机

curl -x192.168.233.150:80 2345.com   

#无论访问什么域名,只要是解析到192.168.233.233上,都会访问到abc.com

[root@xinlinux-03 apache2.4]# curl -x192.168.233.150:80 www.123.com

123.com

[root@xinlinux-03 apache2.4]# curl -x192.168.233.150:80 123.com

zbc.com

[root@xinlinux-03 apache2.4]# curl -x192.168.233.150:80 2345.com

zbc.com

 

curl -x127.0.0.1:80 www.123.com

curl -x127.0.0.1:80 www.123.com  -I    #-I(大写i),表示只显示状态码,不显示网站内容,状态码为401

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 www.123.com  -I

HTTP/1.1 200 OK

Date: Thu, 13 Sep 2018 02:03:33 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Last-Modified: Thu, 13 Sep 2018 01:28:26 GMT

ETag: "8-575b69fab6a23"

Accept-Ranges: bytes

Content-Length: 8

Content-Type: text/html

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 www.123.com

123.com

 

总结:

一、#只要是打开VirtuallHost,原来httpd配置文件的Servername、DocumentRoot都会失效

 

二、httpd-vhosts.conf文件内的第一个虚拟主机为默认虚拟主机,如果访问的域名不在其他虚拟主机中,就会访问默认虚拟主机

 

 

11.18 Apache用户认证

针对网站进行验证

1、编辑虚拟主机配置文件

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

#把123.com那个虚拟主机编辑成如下内容:

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    <Directory /data/wwwroot/www.123.com> #指定认证的目录

        AllowOverride AuthConfig #这个相当于打开认证的开关

        AuthName "123.com user auth"  #自定义认证的名字,作用不大

        AuthType Basic   #认证的类型,一般为Basic

        AuthUserFile /data/.htpasswd  #指定密码文件所在位置

        require valid-user #指定需要认证的用户为全部可用用户

    </Directory>

</VirtualHost>

 

2、生成密码文件,并创建用户

/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd xin

#-c表示创建,-m指定md5加密; 指定密码文件    创建用户

[root@xinlinux-03 apache2.4]# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd xin

New password:

Re-type new password:

Adding password for user xin

 

3、 重新加载配置-t , graceful

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

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

 

4、进行测试,如果要浏览器测试,需要绑定hosts(在windows的hosts文件添加192.168.233.150   www.123.com)

 

curl -x127.0.0.1:80 www.123.com #状态码为401(表示需要做用户验证)

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 www.123.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>401 Unauthorized</title>

</head><body>

<h1>Unauthorized</h1>

<p>This server could not verify that you

are authorized to access the document

requested.  Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.</p>

</body></html>

 

curl -x127.0.0.1:80 -uxin:1234 www.123.com #状态码为200

#-u选项后面接 用户名:密码,可直接跳过用户验证

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 -uxin:1234 www.123.com

123.com

 

 

还可以针对单个文件进行认证

1、编辑虚拟主机配置文件

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

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    <FilesMatch 123.php>        

        AllowOverride AuthConfig

        AuthName "123.com user auth"

        AuthType Basic

        AuthUserFile /data/.htpasswd

        require valid-user

    </FilesMatch>

</VirtualHost>

 

2、检查配置语法,重新加载配置文件

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

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

[root@xinlinux-03 apache2.4]# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@xinlinux-03 apache2.4]# /usr/local/apache2.4/bin/apachectl graceful

 

3、针对123.php文件进行验证要123.php文件存在,如果不存在,创建

编辑123.php

vim /data/wwwroot/www.123.com/123.php

<?php

echo  "123.php";

 

curl -x127.0.0.1:80 www.123.com/123.php     #状态码为401

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 www.123.com/123.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>401 Unauthorized</title>

</head><body>

<h1>Unauthorized</h1>

<p>This server could not verify that you

are authorized to access the document

requested.  Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.</p>

</body></html>

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 -uxin:1234 www.123.com/123.php

123.php[root@xinlinux-03 apache2.4]#

 

 

11.19/11.20 域名跳转

#搜索引擎搜索网站的先后排序是根据网站所占据的权重高低

 

域名跳转的原因:

也叫301状态跳转,永久重定向,把跳转前的旧网站的权重降低,所有权重加给跳转后的新网站

 

实例: 需求,把123.com域名跳转到www.123.com,配置如下:

1、编辑虚拟主机配置文件

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

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

</IfModule>

</VirtualHost>

 

   ^/(.*)$ http:#www.123.com/$1 [R=301,L]   

#^/(.*)$   表示网站后面的内容保持不变,跳转到http:#www.123.com/; $1表示有几段不变,这里是一段;[R=301,L] 表示定义状态为301

 

##301指的是永久重定向,302是临时重定向,如果是302的话,搜索引擎不会把跳转前的旧网站的权重降低

 

2、检查配置语法,重载文件

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

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

 

3、检查域名跳转所需的模块

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

#若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#

 

4、进行测试

curl -x127.0.0.1:80 -I 123.com #状态码为301

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 -I 123.com

HTTP/1.1 301 Moved Permanently

Date: Thu, 13 Sep 2018 02:14:40 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Location: http://123.com/http:%23www.123.com/

Content-Type: text/html; charset=iso-8859-1

 

 

11.21 Apache访问日志

1、定义log日志

vim /usr/local/apache2.4/conf/httpd.conf #搜索LogFormat

 

#显示了log使用的两种格式

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

#Log默认用的是common格式

 

combined格式参数:

User-Agent  表示用户代理,用户通过什么方式访问网站

Referer         表示上一次访问的网址是什么,例如:先访问网站首页,然后点击进入下一个网页,那上一次访问的网址就是首页

 

2、 把虚拟主机配置文件改成combined格式

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

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    ServerAlias 123.com

    CustomLog "logs/123.com-access_log" combined

</VirtualHost>

 

3、 重新加载配置文件

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

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

 

4、进行测试

curl -x127.0.0.1:80 -I 123.com

[root@xinlinux-03 apache2.4]# curl -x127.0.0.1:80 -I 123.com

HTTP/1.1 200 OK

Date: Thu, 13 Sep 2018 02:19:42 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Last-Modified: Thu, 13 Sep 2018 01:28:26 GMT

ETag: "8-575b69fab6a23"

Accept-Ranges: bytes

Content-Length: 8

Content-Type: text/html

 

5、两种日志格式对比

tail /usr/local/apache2.4/logs/123.com-access_log

common格式

127.0.0.1 - - [13/Sep/2018:10:21:31 +0800] "HEAD HTTP://123.com/ HTTP/1.1" 200 -

 

combined格式

为了显示Referer ,我将www.123.com写入博客,然后通过博客的链接点击

127.0.0.1 - - [13/Sep/2018:10:23:01 +0800] "HEAD HTTP://123.com/ HTTP/1.1" 200 - "-" "curl/7.29.0"

192.168.233.1 - - [13/Sep/2018:10:24:46 +0800] "GET / HTTP/1.1" 304 - "https://www.cnblogs.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36"

 

 

11.22 访问日志不记录静态文件

chrome、firefox浏览器可以查看网站的静态文件,按F12,点击Network那一栏,然后刷新网站,静态文件就会显示出来

 

• 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录

1、将静态文件不记录到日志里面

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

 把虚拟主机配置文件改成如下:

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    ServerAlias 123.com

    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

    CustomLog "logs/123.com-access_log" combined env=!img

</VirtualHost>

#env=!img     #表示符合以上条件的img都不会保存到日志

 

2、 重新加载配置文件 -t, graceful

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

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

 

#上传一张图片,模拟实验效果

mkdir /data/wwwroot/www.123.com/images #创建目录,并在这目录下上传一个图片

curl -x127.0.0.1:80 -I 123.com/images/123.png

• tail /usr/local/apache2.4/logs/123.com-access_log

 

 

11.23 访问日志切割

•日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件

 

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

• 把虚拟主机配置文件改成如下:

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    ServerAlias 123.com

   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

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

</VirtualHost>

 

#rotatelogs是Apache自带的日志切割工具,-l 表示以当前系统的时间为基准,不指定的话,会以UTC的时间去切割;中国时间是CST,美国时间是UTC

#设置好后,只要是每天凌晨0点的时候就会生成新的日志文件

 

• 重新加载配置文件 -t, graceful

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

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

 

ls /usr/local/apache2.4/logs

 

#必须要做一个任务计划,定期将多久的日志文件删除掉或者转移,避免磁盘写满

 

 

11.24 静态元素过期时间

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

• 增加配置

 

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

 

• 需要打开expires_module模块

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

 

• curl测试,看cache-control: max-age

 

在浏览器内CTRL+F5,可以把下载的图片缓存等全部清空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值