linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

发布于 2018-03-02  375 次阅读


Apache 用户认证

某些网站,当你访问的时候弹出要求输入用户名和密码才能访问,目的是为了增加安全性

编辑虚拟主机配置文件:

[root@am-01:~#] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

  <VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName 111.com

    ServerAlias www.example.com

    ErrorLog "logs/111.com-error_log"

    CustomLog "logs/111.com-access_log" common

    <Directory /data/wwwroot/111.com>

#指定认证的目录

        AllowOverride AuthConfig

#打开认证的开关

        AuthName "111.com user auth"

#定义认证的名字,作用不大

        AuthType Basic

#认证的类型,一般为 Basic

        AuthUserFile /data/.htpasswd

#指定密码文件所在位置

        require valid-user

#指定需要认证的用户为全部可用用户

    </Directory>

  </VirtualHost>

#这里主要是把上一篇文章的 111.com 相关的配置修改一下
[root@am-01:~#] /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd user

New password:

Re-type new password:

Adding password for user user

[root@am-01:~#] cat /data/.htpasswd

user:$apr1$q.qTGqPw$26TmpplXbcMp6wKMkL6hY.

#使用 apache 自带的 htpasswd 命令创建密码文件/data/.htpasswd,-c 是创建的意思,-m 是指使用 md5 加密,最后跟用户名,再按提示输入你喜欢的密码即可设置完成

[root@am-01:~#] /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd admin

New password:

Re-type new password:

Adding password for user admin

[root@am-01:~#] cat /data/.htpasswd

user:$apr1$q.qTGqPw$26TmpplXbcMp6wKMkL6hY.

admin:$apr1$Dszj3zIf$i5hvVqaxnQWNi75R3J4XP/

#添加用户不需要加-c(创建)参数

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

Syntax OK

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

#测试一下配置的正确性以及重新加载配置文件

linux 虚拟机测试:

[root@am-01:~#] curl -I -x172.17.1.240:80 111.com

HTTP/1.1 401 Unauthorized

Date: Fri, 02 Mar 2018 14:20:12 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

[root@am-01:~#] curl -I -x172.17.1.240:80 -uuser:itsupport.0 www.111.com

HTTP/1.1 200 OK

Date: Fri, 02 Mar 2018 14:28:00 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

#使用 curl 测试一下,-x 可以指定 IP 和端口及站点,-I 指只返回头部信息,-u 指定用户名和密码

#401 是指该站点需要登陆验证,200 是请求成功的状态码

windows 客户端浏览器测试:

提示输入用户名和密码,输入正确即可访问

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

针对单个文件进行登录验证

[root@am-01:~#] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

  <VirtualHost *:80>

      DocumentRoot "/data/wwwroot/111.com"

      ServerName 111.com

      ServerAlias www.example.com

      ErrorLog "logs/111.com-error_log"

      CustomLog "logs/111.com-access_log" common

  #    <Directory /data/wwwroot/111.com>

      <FilesMatch 123.php>

          AllowOverride AuthConfig

          AuthName "111.com user auth"

          AuthType Basic

          AuthUserFile /data/.htpasswd

          require valid-user

      </filesMatch>

  #    </Directory>

  </VirtualHost>

#FilesMatch 用来指定要验证的文件
[root@am-01:~#] vim /data/wwwroot/111.com/123.php

  <?php

  phpinfo();

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

Syntax OK

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

#测试一下配置的正确性以及重新加载配置文件

linux 虚拟机测试:

[root@am-01:~#] curl -I -x172.17.1.240:80  111.com

HTTP/1.1 200 OK

Date: Fri, 02 Mar 2018 14:39:03 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

[root@am-01:~#] curl -I -x172.17.1.240:80  111.com/123.php

HTTP/1.1 401 Unauthorized

Date: Fri, 02 Mar 2018 14:39:10 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

[root@am-01:~#] curl -I -x172.17.1.240:80  -uuser:itsupport.0 111.com/123.php

HTTP/1.1 200 OK

Date: Fri, 02 Mar 2018 14:40:53 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

#可以看到访问 111.php 不在需要输入用户名和密码,而访问 111.com/123.php 则需要输入用户名和密码

windows 客户端浏览器测试:

也可见到如图所示的结果

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

Apache 域名跳转

一般因为原域名已经弃用,启用新域名,就需要设置域名跳转,让用户访问原域名的时候会自动跳转到新域名,同时也因为 SEO 优化,也叫 301 永久重定向

编辑虚拟主机配置文件:

[root@am-01:~#] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

  <VirtualHost *:80>

      DocumentRoot "/data/wwwroot/111.com"

      ServerName 111.com

      ServerAlias www.example.com

      ErrorLog "logs/111.com-error_log"

      CustomLog "logs/111.com-access_log" common

  #    <Directory /data/wwwroot/111.com>

  #    <FilesMatch 123.php>

  #        AllowOverride AuthConfig

  #        AuthName "111.com user auth"

  #        AuthType Basic

  #        AuthUserFile /data/.htpasswd

  #        require valid-user

  #    </filesMatch>

  #    </Directory>

      <IfModule mod_rewrite.c>

#开启 mod_rewrite 模块支持

          RewriteEngine on

#打开 rewrite 功能

          RewriteCond %{HTTP_HOST} !^111.com$

#定义 rewrite 的条件,主机名(域名)不是 111.com 满足条件,”!^111.com$“是指不是以 111 开头,com 结尾的都满足条件

          RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]

#定义 rewrite 规则,当满足上面的条件时,这条规则才会执行,“^/(.*)$ http://111.com/$1 [R=301,L]”中的"^"表示除去域名之外,“/(.*)$”表示“/”之后的所有内容,“http://111.com/$1”中的$1 表示前面第一个小括号,“[R=301,L]”中的 R 定义状态码,L 表示只跳转一次则结束

      </IfModule>

  </VirtualHost>

#为方便做实验,先把用户验证相关的配置注释,再填写新的配置
[root@am-01:~#] /usr/local/apache2.4/bin/apachectl -M | grep rewrite

[root@am-01:~#] vim /usr/local/apache2.4/conf/httpd.conf

  LoadModule rewrite_module modules/mod_rewrite.so

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

 rewrite_module (shared)

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

Syntax OK

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

#检查是否加载 rewrite_module 模块,发现没加载,因为编译安装 apache 的时候已经装上了,所以只需要在配置文件中启用模块即可,最后测试一下配置的正确性以及重新加载配置文件

linux 虚拟机测试:

[root@am-01:~#] curl -I -x172.17.1.240:80 www.example.com

HTTP/1.1 301 Moved Permanently

Date: Fri, 02 Mar 2018 15:30:34 GMT

Server: Apache/2.4.29 (Unix) PHP/7.1.6

Location: http://111.com/

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

[root@am-01:~#] curl -x172.17.1.240:80 www.example.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>301 Moved Permanently</title>

</head><body>

<h1>Moved Permanently</h1>

<p>The document has moved <a href="http://111.com/">here</a>.</p>

</body></html>

[root@am-01:~#] curl -x172.17.1.240:80 www.example.com/123.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>301 Moved Permanently</title>

</head><body>

<h1>Moved Permanently</h1>

<p>The document has moved <a href="http://111.com/123.php">here</a>.</p>

</body></html>

[root@am-01:~#] curl -x172.17.1.240:80 www.example.com/123.php -I

HTTP/1.1 301 Moved Permanently

Date: Fri, 02 Mar 2018 15:32:13 GMT

Server: Apache/2.4.29 (Unix) PHP/7.1.6

Location: http://111.com/123.php

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

#可以见到访问 www.example.com 的时候做了 301 永久重定向

windows 客户端浏览器测试:

可以看到,也是做了 301 永久重定向

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

知识点:

404:页面不存在

401:用户名密码验证

200:访问正常

301:永久重定向

302:临时重定向

403:拒绝访问,在 apache 中,当配置文件中的“Require all granted”改为“Require all denied”会出现

Apache 访问日志

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

[root@am-01:~#] cat /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    ErrorLog "logs/111.com-error_log"

    CustomLog "logs/111.com-access_log" common

[root@am-01:~#] ls /usr/local/apache2.4/logs/111.com-access_log

/usr/local/apache2.4/logs/111.com-access_log

#因为在虚拟主机配置文件中定义了 111.com 的用户访问日志,在这里能看到
[root@am-01:~#] cat /usr/local/apache2.4/logs/111.com-access_log

172.17.1.240 - - [02/Mar/2018:22:39:03 +0800] "HEAD HTTP://111.com HTTP/1.1" 200 -

172.17.1.240 - - [02/Mar/2018:22:39:10 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 401 -

172.17.1.240 - user [02/Mar/2018:22:39:22 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 500 -

172.17.1.240 - user [02/Mar/2018:22:40:53 +0800] "HEAD HTTP://111.com/123.php HTTP/1.1" 200 -

#能看到一些访问信息,包括了访问的地址,时间,动作,HTTP 版本,状态码,页面大小等
[root@am-01:~#] 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

#这两句决定了访问日志的格式,默认使用 common 格式

#combined 格式中的 User-Agent 指用户代理,例如通过浏览器访问页面,通过 curl 命令访问页面,这就叫做用户代理,如你通过谷歌浏览器访问,就会显示跟谷歌浏览器相关的内容

#combined 格式中的 Referer 指当前页面的上一次所访问的网址
[root@am-01:~#] vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    CustomLog "logs/111.com-access_log" combined

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

Syntax OK

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

#把 common 改为 combined,最后测试一下配置的正确性以及重新加载配置文件

测试:

在 windows 客户端浏览器上测试一下

为了更好的测试 Referer 的效果,我在我自己的博客随便回复一篇文章,内容为 http://111.com/123.php,并点击跳转

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

linux 学习笔记-041-Apache 用户认证,域名跳转,访问日志

[root@am-01:~#] cat /usr/local/apache2.4/logs/111.com-access_log

172.17.1.1 - - [03/Mar/2018:00:29:47 +0800] "GET /123.php HTTP/1.1" 200 75087 "https://www.itwordsweb.com/276.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36"

#查看用户访问日志,可以见到,多了句"https://www.itwordsweb.com/276.html",说明 Referer 和 User-Agent 是有效果

扩展

apache 虚拟主机开启 php 的短标签:

http://ask.apelearn.com/question/5370