2018年9月12日第十九节课笔记——LAMP架构 (2)
内容摘要:
一、Apache默认虚拟主机
<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> 与首行成对出现,表示为一个虚拟主机
- 创建两个虚拟主机的网站根目录: 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 输出如图:
二、Apache用户认证
DocumentRoot "/data/wwwroot/111.com"
<Directory /data/wwwroot/www.123.com> 指定认证的目录
AllowOverride AuthConfig 这个相当于打开认证的开关
AuthName "123.com user auth" 自定义认证的名字,作用不大
AuthUserFile /data/.htpasswd 指定密码文件所在位置
require valid-user 指定需要认证的用户为全部可用用户
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
- 检测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
DocumentRoot "/data/wwwroot/www.123.com"
<FilesMatch admin.php> 指定某个文件需要用户认证
三、域名跳转
DocumentRoot "/data/wwwroot/www.123.com"
<IfModule mod_rewrite.c> 需要mod_rewrite模块支持
RewriteCond %{HTTP_HOST} !^www.123.com$ 定义rewrite的条件,主机名(域名)不是www.123.com满足条件
RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] 定义rewrite规则,当满足上面的条件时,这条规则才会执行,其中状态301表示永久跳转,302表示临时跳转。
四、Apache访问日志
- 在httpd配置文件中定义有两种日志文件的格式:/usr/local/apache2.4/conf/httpd.conf
- 其中referer:表示从哪一个链接跳转过来的,user-agent:用户代理( 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息)。
五、访问日志不记录静态文件
apache的访问日志会记录网站每个文件被获取的信息,这样日志信息量会很大,我们排查日志的时候不容易筛选有用的记录。我们可以把静态文件的日志设置为不记录,提高我们排查日志信息的效率
DocumentRoot "/data/wwwroot/www.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所包含的静态文件。
六、访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件(自动删除老的日志文件需要配置相关的脚本文件)。
DocumentRoot "/data/wwwroot/www.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
- 双引号中即日志切割的相关配置
- rotatelogs是apache的切割日志工具
- 选项-l 以当前系统的时间为基准(apache2.4版本中可以不加该选项)
- %y%m%d以年月日命名切割的日志文件
- 86400单位秒,即表示每一天切割生成一个日志文件。
七、静态元素过期时间
浏览器访问网站,获取的图片、css等静态元素会保存在本地电脑缓存文件夹里,方便下次再此访问的时候提高访问速度。我们也可以在服务器端设置这些静态元素的过期时间,可以减网站的带宽压力。不设定过期时间时,当服务器更改时也依然回去读取缓存,所以需要为这些缓存设定一个过期时间
- 在apache子配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf里设定:是通过expires模块实现的。
- 修改apapche配置文件,开启expires模块
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"
八、课堂笔记
- 虚拟主机指的是在单一机器上运行多个网站,每一个网站实际就是一个虚拟主机。虚拟主机可以"基于IP",即每个IP一个站点; 或者"基于名称", 即每个IP多个站点。也可以是基于端口。目前常用的是基于名称的虚拟主机。
- 如果在包含最具体匹配IP地址和端口组合的虚拟主机集中找不到匹配的ServerName或ServerAlias,则将使用与之匹配的第一个列出的虚拟主机。这个主机就是默认的虚拟主机。
- 在apache全局配置文件httpd.conf中定义了默认的虚拟主机、网站目录以及首页index.html
- 在用Apache做web服务器的时候,有的时候需要将输入的URL转换成另一个URL。这可以通过Apache的rewrite功能实现。
- Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于 Perl语言。可基于服务器级的(httpd.conf)级的方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
九、扩展
- 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