第十一章 LAMP架构(中)

一、Apache默认虚拟主机
二、Apache用户认证
三、域名跳转
四、Apache访问日志
五、访问日志不记录静态文件
六、访问日志切割
七、静态元素过期时间
八、扩展

一、Apache默认虚拟主机

虚拟主机指的是在单一机器上运行多个网站,每一个网站实际就是一个虚拟主机。虚拟主机可以"基于IP",即每个IP一个站点; 或者"基于名称", 即每个IP多个站点。也可以是基于端口。目前常用的是基于名称的虚拟主机。

如果在包含最具体匹配IP地址和端口组合的虚拟主机集中找不到匹配的ServerName或ServerAlias,则将使用与之匹配的第一个列出的虚拟主机。这个主机就是默认的虚拟主机。

1.测试默认虚拟主机的访问:

在本机添加hosts,路径(C:\Windows\System32\drivers\etc\hosts)

通过本机浏览器访问www.abc.com和www.123.com,均可正常访问默认主机的默认主页。因为当前Apache Web Server还没有其他的虚拟主机。所以都是定位到默认主机。

2.在apache全局配置文件httpd.conf中定义默认的虚拟主机、网站目录以及首页index.html(索引页)

2.1打开配置文件: vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost,去掉#

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

//改为如下:(新增一个域名就是一个虚拟主机)

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.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 2111.com.cn
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

文件各行信息:

vim

2.2.创建目录

2.3.在对应站点根目录下创建index.php

3.检查服务是否正确、重新加载

4.验证

 

二、Apache用户认证

有时候为满足特殊的安全需求,需要对网站或网站的特定页访问进行验证,然后才可以访问网站的相应内容,例如网站的后台管理页面,可以通过开启apache的用户认证功能来实现。

1.实现过程(以111.com为例)

1.1.修改/usr/local/apache2/conf/extra/httpd-vhosts.conf文件
    <Directory /data/wwwroot/111.com>
          AllowOverride AuthConfig
          AuthName "111.com user auth"
          AuthType Basic
          AuthUserFile /data/.htpasswd
          require valid-user
   # </Directory>

1.2.创建用户与密码文件:-c选项是创建、-m选项是使用md5加密算法,user01是认证用户名

[root@Linux01 ~]# /usr/local/apache2/bin/htpasswd -c -m /data/.htpasswd user01

1.3.检验配置文件及重载

1.4 验证

浏览器验证:

命令行验证:

2.也可以对网站下的单个页面进行访问认证:(以111.com为例)

2.1 修改/usr/local/apache2/conf/extra/httpd-vhosts.conf文件
    #<Directory /data/wwwroot/111.com>
     <FilesMatch 123.php>
          AllowOverride AuthConfig
          AuthName "111.com user auth"
          AuthType Basic
          AuthUserFile /data/.htpasswd
         require valid-user
    </FilesMatch>
   # </Directory>

2.2 在111.com下新建一个123.php

2.3 重新加载、验证

三、域名跳转

在用Apache做web服务器的时候,有的时候需要将输入的URL转换成另一个URL。这可以通过Apache的rewrite功能实现。

Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于 Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。

跳转是在别名中的其中一个域名跳转到现在的域名;(以www.example.com跳转到111.com为例)

1.在apache的全局配置文件中启用rewrite模块

[root@Linux01 ~]# vim /usr/local/apache2/conf/httpd.conf

#LoadModule rewrite_module modules/mod_rewrite.so  //取消该句注释,开启rewrite功能

2.编辑/usr/local/apache2/conf/extra/httpd-vhosts.conf 虚拟主机文件

[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
添加这段:

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

代码301:表示永久跳转,降低原来域名的权重增加到新域名上;

代码302:表示临时跳转,不会降低原域名的权重。

3.测试配置文件及重载

4.验证(Windows下绑定hosts)

4.1 浏览器验证:跳转成功

访问111.com下的123.php时,也会跳转,而且域名后面不变:

4.2 命令行验证(-I只显示状态码,不显示信息)

四、Apache访问日志

Apache的访问日志是在虚拟主机子配置文件httpd-vhosts.conf中定义的,一个虚拟主机对应一个错误日志和访问日志。

1. [root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

虚拟主机日志查看(以111.com的访问日志为例)

[root@Linux01 ~]# ls /usr/local/apache2/logs
111.com-access_log  abc.com-access_log  access_log  httpd.pid
111.com-error_log   abc.com-error_log   error_log
[root@Linux01 ~]# ls /usr/local/apache2/logs/111.com-access_log
/usr/local/apache2/logs/111.com-access_log
[root@Linux01 ~]# cat !$
cat /usr/local/apache2/logs/111.com-access_log

2.访问日志的格式定义在apache的全局配置文件/usr/local/apache2/conf/httpd.conf中

[root@Linux01 ~]# vim /usr/local/apache2/conf/httpd.conf

//通常用common级的日志,但是记录的内容比较简单;如需更详细的记录,可以开启combined级的日志记录 //combined级的日志记录:包含Referer信息:访问页面的上一级链接,User-Agent信息:用户代理,用户访问页面使用的工具:浏览器、curl等。

3.对虚拟主机开启combined级日志功能

[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

3.1 重新加载配置文件

[root@Linux01 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@Linux01 ~]# /usr/local/apache2/bin/apachectl graceful

4. 验证

[root@Linux01 ~]# cat /usr/local/apache2/logs/111.com-access_log

//重载配置文件后通过浏览器访问

//重载配置文件后通过命令行访问

五、访问日志不记录静态文件

apache的访问日志会记录网站每个文件被获取的信息,这样日志信息量会很大,我们排查日志的时候不容易筛选有用的记录。我们可以把静态文件的日志设置为不记录,提高我们排查日志信息的效率。

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

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

[root@Linux01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  ErrorLog "logs/111.com-error_log"
    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/111.com-access_log" combined env=!img

2.验证

2.1 未重新加载:

[root@Linux01 ~]# cat /usr/local/apache2/logs/111.com-access_log //日志中保存了记录

2.2 重新加载配置文件:

[root@Linux01 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@Linux01 ~]# /usr/local/apache2/bin/apachectl graceful

[root@Linux01 ~]# cat /usr/local/apache2/logs/111.com-access_log //日志中未保存记录

2.3 2.jpg文件不存在,不能准确判断网站上的图片等静态文件记录是否能保存到日志文件,现在上传一张图片到111.com网站下进行测试

命令行访问测试:

浏览器访问测试:

[root@Linux01 111.com]# cat /usr/local/apache2/logs/111.com-access_log  //访问日志

六、访问日志切割

随着网站访问量的增大,网站的访问日志文件也会变得很大,甚至有一天会把整个磁盘占满,为了保证磁盘空间不会被占满,方便日志的管理(如查询、备份、删除历史日志等。),我们需要对日志进行切割操作,可以以天为单位将日志独立切割出来,并删除老的日志文件 。

1. 在/usr/local/apache2/conf/extra/httpd-vhosts.conf配置文件下进行设定:

  //%y%m%d以年月日命名,86400秒即1天切割一次。rotatelogs是apache的切割日志工具。-l 以当前系统时间切割,
默认是美国时间
    CustomLog "|/usr/local/apache2/bin/rotatelogs -l logs/111.com-access_%y%m%d.log 86400" combined env=!img 

2. 重新加载

3. 验证

4. 以后每天都会多出一个日志切割文件,记录对网站的操作记录;

设置一个cron计划,用来删除旧的日志文件,保证磁盘空间。

七、静态元素过期时间

浏览器访问网站,获取的图片、css等静态元素会保存在本地电脑缓存文件夹里,方便下次再此访问的时候提高访问速度。我们也可以在服务器端设置这些静态元素的过期时间,可以减网站的带宽压力。

在虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf里设定:是通过expires模块(定义失效时间)实现的。在编译apache的时候指定了参数mods=most,该模块已经编译进来。

1. 首先在apache全局配置文件里启用该模块

[root@Linux01 ~]# vim /usr/local/apache2/conf/httpd.conf

#LoadModule expires_module modules/mod_expires.so  //取消注释

检查apache拓展模块:

2. 在虚拟主机配置文件中更改配置

[root@Linux01 ~]#  vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

//增加该段配置
    <IfModule mod_expires.c>
    ExpiresActive on  // 打开该功能的开关
    ExpiresByType image/gif "access plus 1 days"   //gif类型文件的失效时间是1天
    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>

3.重新加载

4. 验证

4.1 命令行验证

4.2 浏览器验证

访问图片,状态码200

刷新:状态码变成304,说明已经缓存到本地,不再需要重新下载

八、扩展
apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370
apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960
apache只记录指定URI的日志 http://ask.apelearn.com/question/981
apache日志记录客户端请求的域名 http://ask.apelearn.com/question/1037
apache 日志切割问题 http://ask.apelearn.com/question/566

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/84798184