5月9日任务:
11.16/11.17 Apache默认虚拟主机
11.18 Apache用户认证
11.19/11.20 域名跳转
11.21 Apache访问日志
11.22 访问日志不记录静态文件
11.23 访问日志切割
11.24 静态元素过期时间
apache2编译安装的另外一种方法:
下载apr-1.6、apr-util-1.6以及httpd-2.4,分别解压三个源码包
把apr-1.6.3 放到httpd源码包的/srclib/下,改名apr
把apr-util-1.6.1 放到httpd源码包的/srclib/下,改名apr-util4)编译参数./configure --prefix=/dir/ --enable-so --enable-mpms-shared=all --with-mpm=event --enable-mods-shared=most --with-included-apr
说明:这里的/dir/为apache安装路径,根据需求定目录
apache的一些学习文档: https://github.com/aminglinux/apache
一、Apache默认虚拟主机
一台服务器可以访问多个网站,每个网站都是一个虚拟主机
概念:域名(主机名)、DNS、解析域名、hosts
任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
1. windows下host用法
第一步:按下图找到host文件
第二步:按下图添加域名;
第三步:ping 设置的域名是否通畅;
第四步:在浏览器访问域名
2. linux下配置虚拟主机
当虚拟主机配置文件生效后,主配置文件中所定义的DocumentRoot会失效
虚拟主机配置文件一旦打开,可以定义多个VirtualHost,每个VirtualHost代表一个站点,都代表一个虚拟主机
第一步:编辑配置文件httpd.conf,去掉以下的#号,使虚拟主机的配置文件生效
去掉#号 加载虚拟主机的配置文件
第二步:进入虚拟主机配置文件中;
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf httpd-vhosts.conf虚拟主机配置文件
//改为如下
第三步: 创建和虚拟主机对应的站点根目录,以及新建相应index.php
并在对应站点下创建index.php
usr/local/apache2.4/bin/apachectl -t //需要检查配置语法
/usr/local/apache2.4/bin/apachectl graceful //加载
第四步:ping 设置的www.abc.com,此时明显是外网的域名;
vi /etc/hosts hosts文件,访问本机上的abc.com可以编辑hosts文件,还可以使用curl
第五步:用 curl -x192.168.37.3:80 abc.com 来测试
不论把什么域名指向过来都会访问到abc.com,abc.com是虚拟主机配置文件中配置的第一个虚拟主机,它就是默认虚拟主机,无论访问什么域名,只要解析到这个ip上都会访问该网站对应的虚拟主机配置
二、Apache用户认证
1.全局用户认证
在虚拟主机配置文件 httpd-vhosts.conf ,配置另一台虚拟主机信息
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
以下是配置文件中,第二个虚拟主机的配置:
创建密码htpasswd命令
在创建密码文件前先要了解htpasswd命令: htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。
/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd tobe
c是creat,创建的意思;
m是md5加密
指定密码文件错在位置 /data/.htpasswd
tobe 用户名
再增加一个用户,就不用再添加-c;注意:如果继续用 -c ,那么就会把之前的用户名覆盖;
连接测试此虚拟,
/usr/local/apache2.4/bin/apachectl -t //更改配置后,需要检查配置语法
/usr/local/apache2.4/bin/apachectl graceful //需要加载
curl -x127.0.0.1:80 111.com 401报错
curl命令的 -I 参数,显示 http response 的头信息,此时需要用户认证
浏览器中访问,需要在windows中的hosts中设置,需要输入用户名密码验证
访问成功
使用curl输入用户名和密码
curl命令的 -u 参数,可以登录用户名,及密码;
curl -x127.0.0.1:80 -utobe:tobe 111.com -I 此处用户名和密码都是tobe
故意输错密码,就会报错;
2. 单个文件进行认证
在虚拟主机配置文件 httpd-vhosts.conf ,按下面修改信息;
<FilesMatch 123.php> 指定访问123.php时才认证
/usr/local/apache2.4/bin/apachectl -t //更改配置后,需要检查配置语法
/usr/local/apache2.4/bin/apachectl graceful //需要加载
vim /data/wwwroot/111.com/123.php
curl -x127.0.0.1:80 111.com 先测试111.com,访问成功
curl -x127.0.0.1:80 111.com/123.php -I
因为给123.php加了认证,所以访问时报错
curl -x127.0.0.1:80 -utobe:tobe 111.com/123.php -I 加上用户名和密码可以访问
三、 域名跳转
域名跳转类似于将网页重新指向另一个网站,但区别是域名跳转会将域名本身重新指向网站,而不使用HTML或脚本来进行重新指向。当域名被设置为跳转至另一网站,域名的地址将不会保留在浏览器的URL栏中,该栏显示的会是新页面的URL。如果您希望保留该栏中的URL,则需要使用隐形跳转。
配置域名跳转
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
建议设置状态码为301,L只跳转一次,结束
查看apache是否加载了rewrite模块,若无该模块,需要编辑配置文件
/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
修改配置文件/httpd.conf ,把rewrite模块 加载上,LoadModule rewrite_module modules/mod_rewrite.so前面#号去掉
vim /usr/local/apache2.4/conf/httpd.conf
加载出来了
进行测试:
查看网络链接, :::80 代表全网都支持跳转;
显示301码,会跳转,moved到111.com
curl -x192.168.37.3:80 2111.com.cn/werewrwe -I 2111.com下面,不存在的域名,只是显示跳转
curl -x192.168.37.3:80 111.com/123.php -I 真实存在的域名,会显示200状态码;
四、Apache访问日志
1.Apache访问日志所在位置
打开日志的目录,/usr/local/apache2.4/logs/
2. 查看日志格式
打开apache主配置文件,查找日志的格式内容
vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat
两个日志格式common和combined,默认使用的是common
User-Agent 用户代理
Referer 浏览器上一次所访问的网址
3. 更改日志格式
再次打开虚拟主机,配置文件: vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 把之前的common,改为combined
重新加载虚拟主机配置文件,测试123.php,目的是为了生成新的日志
再次查看新生成的日志
五、访问日志不记录静态文件
很多网站大多为静态网页,网页内部的图片、css文件等同样有其网址链接,如果不设置,这些无效的信息也将被存入访问日志中,会导致访问日志文件大小快速增加,占用大量存储空间。我们可以通过设置不记录某些文件来减少无效信息,节省内存资源。
先访问 .jpg的文件;无论有无此文件,它都会产生日志;
curl -x192.168.94.3:80 111.com/asdqwe.jpg -I
tail /usr/local/apache2.4/logs/111.com-access_log
最后一条 .jpg的日志,就是我们刚才访问的记录
在配置虚拟主机的配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
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
上面的模块释义: 将所有访问图片的请求定义为变量img,在访问记录(日志)中将其排除即可。重新加载后使用curl访问img变量中所指定格式的文件内容时将不会产生访问记录。img是变量。
此时再访问 curl -x192.168.94.3:80 111.com/qwedqwe.jpg -I的文件,日志没有记录,说明配置成功
cd /data/wwwroot/111.com/ 使用xshell在这目录下上传一个图片image.jpg
curl -x192.168.94.3:80 111.com/image.jpg -I 在请求该文件
tail /usr/local/apache2.4/logs/111.com-access_log 依然不会记录
六、访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
首先配置文件,按下面更改 访问日志(CustomLog)的内容
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
先指定一个工具 /usr/local/apache2/bin/rotatelogs httpd自带的日志切割工具
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
语句解释:
/usr/local/apache2.4/bin/rotatelogs工具是apache自带的分割日志的工具
-l(小写L)参数按当前系统时间为基准进行切割(我国为CST),否则默认UTC
%Y%m%d表示年月日,这样会每天记录一个带日期的日志文件,更方便
86400(s)表示每天都进行切割,一天24小时等于86400秒
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
ls /usr/local/apache2.4/logs/
curl -x192.168.44.3:80 111.com/123.php 访问一次123.php,生产日志文件,查看也是有内容的
七、静态元素过期时间
配置静态元素过期时间
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了
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>
/usr/local/apache2.4/bin/apachectl -M |grep expires 查看expaire模块是否打开,此时没有打开
在主配置文件,去掉#号,启用expires模块 vim /usr/local/apache2.4/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so //去掉#,加载模块
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
/usr/local/apache2.4/bin/apachectl -M |grep expires
名词 | 释义 |
acess | 表示从访问时间开始 |
now | 表示按当前时间开始 |
plus | 在前面的时间基础上加上 |
1 hours/days | 表示文件的生命周期 |
语句:access plus 24 hours 指该文件从访问的时间开始24小时内有效,无需重新获取
curl -x192.168.44.3:80 111.com/qq.jpg -I 相差24小时,86400秒