2018年9月12日第十九节课笔记——LAMP架构 (2)

内容摘要:

  • Apache默认虚拟主机
  • Apache用户认证
  • 域名跳转
  • Apache访问日志
  • 访问日志不记录静态文件
  • 访问日志切割
  • 静态元素过期时间
  • 课堂笔记
  • 扩展

一、Apache默认虚拟主机

  • windows的hosts的文件路径:C:\Windows\System32\drivers\etc\hosts

2018年9月12日第十九节课笔记——LAMP架构 (2)

  1. 设定hosts可以临时将域名指定到设置的ip上去。
  • 修改apache配置文件,将httpd-vhosts.conf这一行的注释去除。

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 在虚拟主机配置文件中,可以自定义虚拟主机:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>                                                                                                           与结尾成对出现,表示为一个虚拟主机

    ServerAdmin [email protected]                                           定义管理员的邮箱,可以删除。

    DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com"                 自定义的网站的根目录

    ServerName dummy-host.example.com                                                                   自定义的网站名

    ServerAlias www.dummy-host.example.com                                                           自定义的网站别名

    ErrorLog "logs/dummy-host.example.com-error_log"                                            错误日志

    CustomLog "logs/dummy-host.example.com-access_log" common                    访问日志

</VirtualHost>                                                                                                                  与首行成对出现,表示为一个虚拟主机

  • 测试虚拟主机,如下图设置:

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 创建两个虚拟主机的网站根目录: mkdir -p /data/wwwroot/abc.com ;mkdir /data/wwwroot/111.com
  • 在两个根目录下,分别创建一个php文件,并编辑内容。
  • 检查httpd配置文件是否正确:/usr/local/apache2/bin/apachectl -t
  • 重新加载配置文件:/usr/local/apache2/bin/apachectl graceful
  • 当输入的域名没有在虚拟主机配置文件中设置时,都会去访问默认的虚拟主机(第一个虚拟主机就是默认虚拟主机)。
  • 使用命令curl -x192.168.229.128:80 abc.com 输出如图:

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 一旦打开虚拟主机配置,httpd.conf 配置中的Documentroot和ServerName将会失效。

二、Apache用户认证

  • 修改虚拟主机配置文件:   vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  • 编辑成如下内容:

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName 111.com

    ServerAlias www.example.com

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

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

        AuthName "123.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>

  • 生成密码文件: /usr/local/apache2/bin/htpasswd -c -m /data/.htpasswd aming       
  1. 选项-c创建密码文件,后序添加用户和密码时不需要该选项。
  2. 选项-m指定加密类型为MD5
  • 检测apache配置是否正确并重新加载配置文件: /usr/local/apache2/bin/apachectl -t ;/usr/local/apache2/bin/apachectl graceful
  • 在linux使用命令curl可以访问加密的服务器:curl -x192.168.229.128:80 -uaming:qaz123 111.com -I  
  1. 选项-x指定ip和端口
  2. 选项-u后面指定用户名和密码
  3. 选项-I只显示头部请求信息
  • 显示状态码为200时,即为访问正确。如图:

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 在windows游览器下访问时,需更改windows的hosts文件将111.com指向192.168.229.128
  • 针对单个文件进行认证,添加内容如下:

<VirtualHost *:80>

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

    ServerName www.123.com

    <FilesMatch admin.php>                指定某个文件需要用户认证

        AllowOverride AuthConfig

        AuthName "123.com user auth"

        AuthType Basic

        AuthUserFile /data/.htpasswd

        require valid-user

    </FilesMatch>

</VirtualHost>

三、域名跳转

  • 打开rewrite模块,修改vim /usr/local/apache2/conf/httpd.conf 去除#注释符号

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 需求,把123.com域名跳转到www.123.com,修改配置文件apache2/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规则,当满足上面的条件时,这条规则才会执行,其中状态301表示永久跳转,302表示临时跳转。

</IfModule>

</VirtualHost>

  • 加载配置文件:/usr/local/apache2/bin/apachectl graceful   
  1. 加载前使用选项-t查看配置文件是否正确
  2. 选项-M查看rewrite模块是否开启
  • 使用命令 curl -x192.168.229.128:80 www.111.com -I   查看是否跳转成功

2018年9月12日第十九节课笔记——LAMP架构 (2)

四、Apache访问日志

  • 在虚拟主机配置文件中可以指定日志的名称,默认日志路径为/usr/local/apache2.4/logs/(即apache的安装目录)

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 默认日志的含义

2018年9月12日第十九节课笔记——LAMP架构 (2)

  1. 第一段:来源IP
  2. 第二段:访问时间
  3. 第三段:访问行为
  4. 第四段:访问域名
  5. 第五段:HTTP版本
  6. 第六段:状态码
  7. 第七段:大小
  • 修改日志文件格式
  1. 在httpd配置文件中定义有两种日志文件的格式:/usr/local/apache2.4/conf/httpd.conf
  2. 其中referer:表示从哪一个链接跳转过来的,user-agent:用户代理( 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息)。

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 将虚拟主机配置文件中日志结尾处的common修改为combined,即可修改日志文件格式为第一种格式。

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 修改后的日志格式,如图:

2018年9月12日第十九节课笔记——LAMP架构 (2)

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

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

  • 修改虚拟主机配置文件/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                               不记录的文件格式,设定标签为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         感叹号取反,即不记录标签img所包含的静态文件。

</VirtualHost>

  • 重新加载配置文件后(-t,graceful),即可在日志中不记录设定的静态文件。

六、访问日志切割

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件(自动删除老的日志文件需要配置相关的脚本文件)。

  • 虚拟主机配置文件改成/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>

  1.  双引号中即日志切割的相关配置
  2. rotatelogs是apache的切割日志工具
  3. 选项-l 以当前系统的时间为基准(apache2.4版本中可以不加该选项)
  4. %y%m%d以年月日命名切割的日志文件
  5. 86400单位秒,即表示每一天切割生成一个日志文件。

七、静态元素过期时间

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

  • 在apache子配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf里设定:是通过expires模块实现的。
  • 修改apapche配置文件,开启expires模块

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • 修改虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf 如下:

<IfModule mod_expires.c>

    ExpiresActive on                打开该功能的开关

    ExpiresByType image/gif  "access plus 1 days"              过期时间为1天,单位可以使days、hours、min。

    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>

  • 游览器,开发者工具中可以查看

2018年9月12日第十九节课笔记——LAMP架构 (2)

  • linux下curl也可以查看设置的过期时间。

2018年9月12日第十九节课笔记——LAMP架构 (2)

八、课堂笔记

  • Apache默认虚拟主机
  1. 虚拟主机指的是在单一机器上运行多个网站,每一个网站实际就是一个虚拟主机。虚拟主机可以"基于IP",即每个IP一个站点; 或者"基于名称", 即每个IP多个站点。也可以是基于端口。目前常用的是基于名称的虚拟主机。
  2. 如果在包含最具体匹配IP地址和端口组合的虚拟主机集中找不到匹配的ServerName或ServerAlias,则将使用与之匹配的第一个列出的虚拟主机。这个主机就是默认的虚拟主机。
  3. 在apache全局配置文件httpd.conf中定义了默认的虚拟主机、网站目录以及首页index.html
  • 域名跳转
  1. 在用Apache做web服务器的时候,有的时候需要将输入的URL转换成另一个URL。这可以通过Apache的rewrite功能实现。
  2. Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于 Perl语言。可基于服务器级的(httpd.conf)级的方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
  • Apache的访问日志是在虚拟主机子配置文件httpd-vhosts.conf中定义的,一个虚拟主机对应一个错误日志和访问日志。

九、扩展