11.18Apache的用户认证

把相应参数copy进去第二个虚拟主机(为了不影响默认主机使用,所以选择了第二个虚拟主机)

 //指定认证的目录
        AllowOverride AuthConfig //这个相当于打开认证的开关
        AuthName "123.com user auth" //自定义认证的名字,作用不大
        AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过
        AuthUserFile /data/.htpasswd  //指定密码文件所在位置
        require valid-user //指定需要认证的用户为全部可用用户
    

[root@Centos7-01 wwwroot]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

修改后

配置完成后,需要创建密码文件,

# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming

上条命令的解释:

htpasswd工具,-c创建,-m MD5加密,后接密码文件./htpasswd 再接用户。

[root@Centos7-01 wwwroot]# ls /data/.htpasswd 
/data/.htpasswd

可以cat密码文件,是一串暗码,是因为被MD5加密过。

[root@Centos7-01 wwwroot]# cat /data/.htpasswd 
aming:$apr1$5mmrMCOX$E0QY/azyYojxZy0jTlsxt1

*注意:如果需要再次增加用户,取消-c 因为-c是创建和生成,如果使用了-c会被覆盖掉。

[root@Centos7-01 wwwroot]# /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan

/usr/

设置完密码后,

重新加载配置-t , graceful

#curl检视信息,401表示此网页需要验证。

配置完成后,需要到真实机windows修改hosts文件(C:\Windows\System32\drivers\etc),把网址添加进去

登录正确账号密码则可验证成功

截图

如果想单独一个文件进行认证,可以这样做。

#vim /data/wwwroot/111.com/123.php

重新加载配置-t , graceful

完成后, 登录111.com/123.php 就需要认证,而111.com就不需要认证。


11.19 11.20 域名跳转


这个用法比较普遍,一个网站可能会有多个域名。

比如阿铭论坛可以用www.lishiming.net访问,也可以用ask.apelearn.com访问。而用www.lishiming.net访问时,浏览器直接跳转到ask.apelearn.com,这就是域名的跳转过程。


状态码:301表示永久重定向,永久跳转。

编译Apache的时候,其中有一项的值是most,其实意思就是把大多数都能使其加载。

而不同的功能需求就代表着不同的模块。

把这段参数复制到httpd-vhost里的虚拟主机上面,

     //需要mod_rewrite模块支持
        RewriteEngine on  //打开rewrite功能
        RewriteCond %{HTTP_HOST} !^111.com$  //定义rewrite的条件,主机名(域名)不是www.111.com满足条件,而我们刚好就设定了2个域名(111.com www.example.com)。
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面,/(.*)相当于111.com/123.php中的123.php R=301是表示状态码是301,L=last,L表示只跳一次。


检查状态,重新加载。检查模块,

[root@Centos7-01 ~]# /usr/local/apache2.4/bin/apachectl -t
[root@Centos7-01 ~]# /usr/local/apache2.4/bin/apachectl grace
[root@Centos7-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite

如果模块没被过滤出来,则需要打开模块。

编辑httpd.conf,搜索/rewrite,把#去掉,打开模块。

LoadModule alias_module modules/mod_alias.so
#LoadModule rewrite_module modules/mod_rewrite.so

再次检查状态,重新加载。检查模块,

[root@Centos7-01 ~]# /usr/local/apache2.4/bin/apachectl -t

[root@Centos7-01 ~]# /usr/local/apache2.4/bin/apachectl graceful

[root@Centos7-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite

 rewrite_module (shared)

状态码是301,跳转成功。

[root@Centos7-01 ~]# curl -x127.0.0.1:80 2111.com.cn -I

HTTP/1.1 301 Moved Permanently

Date: Sat, 14 Apr 2018 04:24:08 GMT

Server: Apache/2.4.33 (Unix) PHP/5.6.30

Location: http://111.com/

Content-Type: text/html; charset=iso-8859-1


11.21 配置访问日志

访问日志记录用户的每一个请求

访问日志目录,其中111.com-access_log 就是访问日志文件

[root@Centos7-01 ~]# ls /usr/local/apache2.4/logs/
111.com-access_log  access_log                          error_log
111.com-error_log   dummy-host2.example.com-access_log  httpd.pid
123.com-access_log  dummy-host2.example.com-error_log
123.com-error_log   dummy-host.example.com-access_log


#cat 111.com-access_log 

HEAD的包 curl -I的包

GET是没有加-I的包


可以进入httpd.conf参考定义日志格式

通常使用第一种格式,combined

参数介绍

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 远程登录名,这个字段通常是"-"

%t 时间

%r 请求动作,比如 curl -I的时候是HEAD

%s 请求状态码,404 301....

%b 传输数据大小

% {Referer}i referer信息 上一次访问的信息,例如,登录了两个网页,第一个是baidu.com,在百度里搜索了阿铭论坛ask.apelearn.com,那么访问阿铭论坛的referer就是baidu了,通常这个信息地址是很长的。

% {User-Agent}i 浏览器标识,比如用firefox和Chrome是不一样的内容显示,使用curl也算在内。


配置定义格式,格式为combined

编辑httpd-vhost.conf

/usr/local/apache2.4/bin/apachectl -t
Syntax OK
/usr/local/apache2.4/bin/apachectl graceful

curl几次,浏览器打开网页,来回访问几次。

再cat日志查看日志信息。

#cat 111.com-access_log