11.18 Apache用户认证
- 用户认证就是在用户访问网站的时候,需要输入用户名密码才能顺利访问。一些比较重要的站点或者网站后台通常会加上用户认证,目的是保证安全。
- 用户认证步骤:
a.编辑虚拟主机的配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
b.修改第2台主机上的内容如下
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<Directory /data/wwwroot/111.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "111.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic
AuthUserFile /data/.htpasswd //指定密码文件所在目录
require valib-user //指定需要认证的用户为全部可用用户
<Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
c.创建密码文件
/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd zchuny //-c表示创建 -m表示使用md5的加密类型 /data/.htpasswd表示密码文件所在位置 zchuny表示用户名,这里可不写useradd
接着输入2次密码确认即可。
cat /data/.htpasswd //这里可以看到输入。冒号左边是用户名,右边是加密字符串
再次执行创建密码文件的命令时,这时候就可以不用-c选项了。在/data/.htpasswd下看到另一个新创建的用户名及加密字符串。
d. 重新加载配置文件
usr/local/apache2.4/bin/apachectl -t
usr/local/apache2.4/bin/apachectl graceful
e.绑定hosts,浏览器测试
curl -x127.0.0.1;80 111.com -I //输出中会出现HTTP/1.1 401 Unauthorized。这里是说访问的内容需要进行用户认证。
在浏览器中输入111.com后,会提示需要进行身份验证。输入正确的用户名和密码即可看到里面的内容。
curl -x127.0.0.1:80 -uzchuny:234514 111.com -I //-u后面跟是用户名和密码。-I的作用是不看内容只看状态码
输入正确的用户名和密码,可以看到下面的输入中出现HTTP/1.1 200 ok则表示正常。[root@zcy-1 ~]变为111.com[root@zcy-1 ~]
3.针对单个文件进行认证。
a.将第2台虚拟主机修改为以下内容
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<FilesMatch 123.php> //匹配123.php文件
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valib-user
<FilesMatch>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
b.重新加载配置文件
usr/local/apache2.4/bin/apachectl -t
usr/local/apache2.4/bin/apachectl graceful
c.vim编辑/data/wwwroot/111.com/123.php.并在里面写入
域名跳转
- 当访问老师的论坛时,可以用www.lishiming.net或者ask.apelearn.com访问,而用www.lishiming.net访问的时候,浏览器里面的网址直接变成了ask.apelearn.com,这其实就是域名的跳转过程。做域名跳转有什么用呢?在老师看来主要有2个方面的作用:1.一个站点有多个域名会对SEO有影响,说白了就是百度搜索关键词的排名有影响,如果多个域名跳转到指定的一个域名,这样以这个域名为中心,就可以把权重集中在这个域名上,关键词的搜索也就靠近了。2.如果之间的某个域名不在使用了,但是搜索引擎还留着之前老域名的链接,这意味着用户可能会搜到我们的网站并且点击老的域名,就需要把老域名做个跳转跳到新域名,这样用户搜的时候,也可以访问到网站
步骤:
1.在虚拟主机配置文件中编辑第二台虚拟主机,更改为如下
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com 2111.com.cn
<IfModule mod_rewrite.c> //需要mod_Rewrite模块支持
RewriteEngin on //打开Rewrite功能
RewriteCond %{HTTP_HOST} !^111.com$ //定义Rewrite的条件,主机名(域名)不是www.123.com的满足条件
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义Rewrite规则,当满足上面的条件时,这条规则才会执行 。L表示只跳一次。
<IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
2.重新加载配置文件,测试之前检查apache是否加载了rewrite模块,如果没有加载。可以在配置文件中打开它,将#LoadModule rewrite_module modules/mod_rewrite.so这行的#号去掉即可。 再次加载配置文件查看是否已加载
3.测试
curl -x192.168.244.128:80 2111.com.cn -I
输入中会出现301状态码。
跳转成功
4.状态码含义
404:表示页面不存在
301:永久跳转,提升权重
302: 临时跳转,不会增加权重
401:用户名密码验证。验证不对是401,验证正确为200
403:在配置文件中granted表示授权,允许访问。状态码为200
denied表示不允许访问。这是会出现403
<Directory />
AllowOverride none
Require all granted
</Directory>
11.21 Apache访问日志
- 访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题。比如有攻击时,是可以通过查看日志看到一些规律。
之前操作的第2台虚拟主机的访问日志是定义在/usr/local/apache2.4/logs/目录下,可以看到111.com-access_log(访问日志)和111.com-error_log(错误日志)。通过cat来查看访问日志,可以看到其中”HEAD”是因为使用curl命令加上-I后只出现状态码而产生的。而GET则是使用curl不加-I选项后产生的。还可以看到来源IP ,访问时间,访问的域名,行为,HTTP的版本。状态码。
定义日志格式
在apache的主配置文件/usr/local/apache2.4/conf/httpd.conf中,
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ///User-Agent表示用户代理,用户通过浏览器获取到网站的内容 Referer记录你的浏览器上次访问的网址是什么。
LogFormat "%h %l %u %t \"%r\" %>s %b" common //默认使用这个
4.在更改虚拟主机配置文件将CustomLog "logs/111.com-access_log" common
//最后的common改为combined
5.加载配置文件
6.再次curl后去查看访问日志的格式已经发生了变化