Apache用户认证
介绍:Apache用户认证也叫httpd的用户认证,这个功能是在用户访问网站的时候,需要输入用户名密码才能访问
普通用户认证
ps:后面的操作都是我们做了默认虚拟主机后 进行的实验 步骤 : 1.修改配置文件(根据自己需求来,别总是无脑复制粘贴)
#进入配置文件目录
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#修改第二个虚拟主机的配置文件,内容如下
DocumentRoot "/data/wwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<Directory /data/wwroot/111.com>//指定认证的目录
AllowOverride AuthConfig//这个相当于打开认证的开关
AuthName "111.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过
AuthUserFile /data/.htpasswd//指定密码文件所在位置
require valid-user//指定需要认证的用户为全部可用用户
</Directory>// 是这个以上的 下面是错误日志目录什么的
</VirtualHost>
2.生成用户名和密码
#生成用户名和密码 ,/data/.htpasswd是密码所在目录,-c就是创建
[root@centos001 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming
New password:
Re-type new password: //如果两次输入的密码不一样会报错
Adding password for user aming
正常的生成就和上面一样,这里我们cat密码文件所在目录的时候出现了一个字符串,是因为我们在生成的时候,使用了-m选项 ,它的意思是指定加密类型 。
[root@centos001 ~]# ls /data/.htpasswd
/data/.htpasswd
[root@centos001 ~]# cat !$
cat /data/.htpasswd
aming:$apr1$U4ET9SZV$ddKI5/2z1iKMGiMj3DSkK/
#当再次增加一个用户的时候就不需要-c了
[root@centos001 ~]# /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd xiaowei
New password:
Re-type new password:
Adding password for user xiaowei
[root@centos001 ~]# cat /data/.htpasswd
aming:$apr1$U4ET9SZV$ddKI5/2z1iKMGiMj3DSkK/
xiaowei:$apr1$tri9uAul$SFEs7w3uh/5ZXmDynEYoq.
- 检查书写并重启服务
#检查书写
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
AH00112: Warning: DocumentRoot [/data/wwwroot/111.com] does not exist
Syntax OK
#提示说我们指定的 目录不存在,那就创建一个咯
[root@centos001 ~]# mkdir /data/wwwroot/
[root@centos001 ~]# mkdir /data/wwwroot/111.com
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
#重启服务
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl graceful
测试
- 首先到windos下更改hosts文件
这里显示401 表示需要用户认证,就是正确的 - 输错密码的时候也会显示401
[root@centos001 ~]# curl -x192.168.10.120:80 111.com -I
HTTP/1.1 401 Unauthorized
Date: Mon, 25 Dec 2017 23:59:01 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1
- 然后输入用户名和密码,显示200 ok 就是正确的
这里卡了好一会儿,一直报错403 ,后来重做了一下 就好了 。应该还是配置文件问题
[root@centos001 ~]# curl -x192.168.10.120:80 -uaaa:123 111.com -I
HTTP/1.1 200 OK
Date: Tue, 26 Dec 2017 04:49:34 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Content-Type: text/html; charset=UTF-8
单个文件认证
- 主机上又是需要给特殊的文件设置认证,防止不相关用户访问 1.更改配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#改成这样
<VirtualHost *:80>
DocumentRoot "/data/wwroot/111.com"
ServerAlias www.example.com
ServerName 111.com
# <Directory /data/wwroot/111.com> 把这个注释掉
<FilesMatch 123.php> //重点
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
<FilesMatch>
#</Directory>
2.我们指定了需要认证的文件,但它还是空的没有就写一个
[root@centos001 ~]# vim /data/wwroot/111.com/123.php
#内容随便写写就行
3.检查语法并重启
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl graceful
111
测试
- 现在用户登录不用验证了,但是访问特定的文件的时候就需要验证了
[root@centos001 ~]# curl -x192.168.10.120:80 111.com
111.com[root@centos001 ~]#
#访问指定文件,提示401
[root@centos001 ~]# curl -x192.168.10.120:80 111.com/123.php -I
HTTP/1.1 401 Unauthorized
Date: Tue, 26 Dec 2017 05:22:04 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1
配置域名跳转
- 介绍
一个网站有多个域名,而用其中一个域名访问网站,会转到这个网站。这个过程叫做域名跳转 域名跳转的作用:
1.对seo有影响,可以理解为搜索排名,越多排名越高
2.比如一个域名不用了,但是有用户啊,用域名跳转就能,让这些使用原来链接的用户跳转过去
步骤
- 需求
把123.com域名跳转到www.123.com,配置如下
<VirtualHost *:80>
DocumentRoot "/data/wwroot/111.com"
ServerAlias www.example.com 211.com
ServerName 111.com
<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规则,当满足上面的条件时,这条规则才会执行
#301表示永久跳转,L表示只跳转一次
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
- 检查并重启服务
[root@centos001 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
/usr/local/apache2.4/bin/apachectl graceful
- 检查有没有加载rewrite模块,这个像报错一样的东西不怎么影响结果,可能是个警告吧
[root@centos001 ~]# /usr/local/apache2/bin/apachectl -M |grep rewrite
httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe34:4a63 for ServerName
Syntax OK
# 如果位加载的话就去下面加载一下
[root@centos001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
- 测试用另一个域名访问,得到的结果是301(永久跳转)。用浏览器访问也是直接跳转到111.com
[root@centos001 ~]# curl -x192.168.10.120:80 www.example.com -I
HTTP/1.1 301 Moved Permanently
Date: Tue, 26 Dec 2017 06:37:23 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Location: http://111.com/
Content-Type: text/html; charset=iso-8859-1
配置访问日志
- 介绍
访问日志的作用很大,不仅能记录网站的访问情况,还能在网站有异常的时候帮我们定位问题,比如有攻击时,能通过查看日至看到一些问题
- 先来查看日志
#查看访问日志所在文件目录
cat /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#在这个目录下,根据虚拟主机配置文件,我们能得到,访问日志所在目录,直接cat就能看到
[root@centos001 ~]# ls /usr/local/apache2.4/logs/
111.com-access_log abc.com-access_log access_log httpd.pid
111.com-error_log abc.com-error_log error_log
[root@centos001 ~]# ls /usr/local/apache2.4/logs/111.com-error_log
/usr/local/apache2.4/logs/111.com-error_log
[root@centos001 ~]# cat !$
cat /usr/local/apache2.4/logs/111.com-error_log
编辑配置
上面的文件 看起来很不方便,而且记录的数据还太多,很多都用不上。下面我们将要学习,怎么更直观的
- 1.主配置文件中定义访问日志的格式
#//进入主配置文件,搜索LogFormat
vim /usr/local/apache2.4/conf/httpd.conf
#得到
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
解说:
两个格式的日志,建议选择第一个,信息记录更全面。 %h为访问网站的IP;%l为远程登录名;%u为用户名,使用认证登录时,就是认证的用户名;%t为时间;%r为请求动作;%s为请求的状态码,%>s为最后的状态码;%b为传输数据的大小;%{Referer}意为由什么地址过来的;%{User-Agent}i为浏览器标识
- 2.编辑虚拟主机配置文件 让访问日志显示
#进入虚拟主机配置文件
[root@centos001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
CustomLog "logs/123.com-access_log" combined
</VirtualHost>
3.查看新的访问日志建议先用浏览器跳转几下
这里能看到很多重要的东西 访问地址 源地址 访问设备 浏览器都知道是什么
#查看
[root@centos001 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
#输出
192.168.10.120 - - [26/Dec/2017:16:26:56 +0800] "HEAD HTTP://www.example.com/ HTTP/1.1" 30
192.168.10.1 - aaa [26/Dec/2017:16:27:30 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (W9.84 Safari/537.36"
···
扩展
apache虚拟主机开启php的短标签
http://ask.apelearn.com/question/5370