11.18 Apache用户认证


Apache用户认证(可以针对目录或文件)

这个功能就是在用户访问网站的时候,需要输入用户密码才能顺利访问。一些比较重要的站点或者网站后台通常会加上用户认证,目的是保证安全。

1. 编辑虚拟主机111.com的配置文件(针对目录):

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

文本配置如下:

<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 valid-user          //指定需要认证的用户为全部可用用户  

  </Directory>

    ErrorLog "logs/111.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

最终保存配置如下:

blob.png 

1.1 Apache自带命令htpasswd创建密码文件.htpasswd包含用户和密码:

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

blob.png 

1.2 查看密码文件是否生成,查看生成用户和密码:

blob.png 

1.3 再增加一个用户如下:

/usr/local/apache2.4/bin/htpasswd  -m /data/.htpasswd pme

blob.png 

说明:

 -c:是创建加密文件;

 -m:是指定md5加密类型;

 指定用户为pme(PS:如果再次新增用户,就不需要再加-c ,因为已经创建过密码文件了);

1.4 检查语法和加载配置文件

/usr/local/apache2.4/bin/apachectl -t    //检查语法

/usr/local/apache2.4/bin/apachectl graceful    //加载配置

blob.png 

1.5检测配置是否生效(401状态码

curl -x47.97.163.117:80 111.com

blob.png 

访问111.com,出现401状态码,说明访问的这个域名需要用户认证

1.5.1 在本地windows系统里做hosts解析111.com

 路径:C:\Windows\System32\drivers\etc

格式:47.97.163.117 111.com

  定义完本地hosts后,用浏览器访问111.com网站时就会出现用户认证,用户密码就是刚才增加的用户和设置的密码

blob.png 

1.6 使用curl -x输入用户名密码访问 (200状态码

curl -x127.0.0.1:80 -upme:123 111.com -I

blob.png 

状态码变成200了,就是正常的,-u的作用是指定用户和密码

 

2. 还可以针对单个文件进行认证(针对文件认证

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

文本配置如下:

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName 111.com

    ServerAlias www.example.com

    <FilesMatch 123.php> //不同的是这行,上面是指定认证的目录,这里是指定单个文件

        AllowOverride AuthConfig

        AuthName "111.com user auth"

        AuthType Basic

        AuthUserFile /data/.htpasswd

        require valid-user

    </FilesMatch> //这行模块命名跟目录的也不同

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

 # </Directory>

    ErrorLog "logs/111.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

最终保存配置如下:

blob.png 

2.1 检查语法和加载配置文件

/usr/local/apache2.4/bin/apachectl -t    //检查语法

/usr/local/apache2.4/bin/apachectl graceful    //加载配置

blob.png 

2.2 111.com目录下编辑创建测试文件123.php

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

blob.png 

2.3 curl -x访问验证是否成功:

curl -x127.0.0.1:80 111.com -I  //不用-u加用户和密码了,也可以访问,出现200状态码

blob.png 

curl -x127.0.0.1:80 111.com/123.php -I //但是访问文件123.php时就出现401了,说明需要用户认证了

blob.png 

 curl -x127.0.0.1:80 -ucfk:123123 111.com/123.php -I   //只有用-u加用户和密码才能正常访问123.php,状态码200

blob.png 

curl -x127.0.0.1:80 -uxie:xie 111.com/123.php   //直接通过验证访问123.php

blob.png 

 

11.19-11.20 域名跳转


域名跳转的作用有两点:

  1. 如果某个域名不再使用了,但是搜索引擎还留着之前的老域名的链接,这意味着用户可能会搜到我们的网站并且点击老的域名,固需要把老域名做个跳转跳到新域名,这样用户搜的时候,也可以访问网站。

  2.一个站点有多个域名会对SEO的排名有影响,如果把多个域名全部跳转到一个指定的域名,这样以这个域名为中心,就可以把权重集中在这个域名上,并给定义一个状态码为301,301叫作永久重定向

一、需求,把123.com域名跳转到www.123.com

1. 编辑配置文件:

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   

  <IfModule mod_rewrite.c>       //需要mod_rewrite模块支持         

        RewriteEngine on        //打开rewrite功能       

       RewriteCond %{HTTP_HOST} !^www.123.com$     //定义rewrite的条件,主机名(域名)不是www.123.com满足条件  

       RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]    //定义rewrite规则,当满足上面的条件时,这条规则才会执行

</IfModule>

</VirtualHost>

最终配置如下:

blob.png 

2. 检测语法及重新加载配置

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

blob.png 

3.检测apache是否加载了rewrite模块。

/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

blob.png 

3.1 若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#

 vi /usr/local/apache2.4/conf/httpd.conf  (进入配置文件,搜索rewrite,删除前面的#号让成生效)

blob.png 

4.然后再检测语法及重新加载配置,查看加载模块

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

blob.png 

5.curl 测试跳转结果是否为301状态码

 curl -x127.0.0.1:80 123.com  -I

blob.png 

 

说明:

 -I 不显示访问内容,只看状态码

 404 这个页面不存在

 301 永久跳转

 401 用户密码验证,密码验证不对就401,验证对了就200

 403 把granted改成denied就会403

blob.png 

 11.21 Apache访问日志

 Apache访问日志

  访问日志的作用很大,不仅可以记录网站的访问日志,还可以在网站有异常发生时帮助我们定位问题,比如有***时,是可以通过查看日志看到一些规律的.日志记录了很多系统的信息,通过读日志,可以找到系统问题的原因。而日志有不同的格式,分为common和combined,combined可以记录更多的信息。

1.查看默认配置文件日志

ls /usr/local/apache2.4/logs/

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

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

blob.png 

2.介绍日志配置文件格式

 vim /usr/local/apache2.4/conf/httpd.conf   (搜索LogFormat

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

 LogFormat "%h %l %u %t \"%r\" %>s %b" common

blob.png 

访问日志记录用户的每一个请求说明如下:

 %h:为访问网站的IP;

 %l:为访问远程登录名,这个字段基本上为"-";

 %u:为用户名,当使用用户认证时,这个字段为认证的用户名;

 %t:为时间;

 %r:为请求的动作(比如用ctrl-I是就为HEADE);

 %s:为请求的状态,写成%>s为最后的状态码;

 %b:为传输数据大小;

 %{Referer}i:为referer信息(请求本次地址上一次的地址就为referer,比如在百度中搜索阿铭linux,然后通过百度的搜索结果页面点击然后到了阿名的论坛,那访问阿铭的论坛的这次请求的referer就是baidu,当然那个地址肯定是很长的);

 %{User-Agent}i:为浏览器标识,比如你用Firefox或者Chrome浏览器,则该字段显示内容不一样,是带有浏览器的标识的。

3. 定义虚拟主机配置文本日志格式

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf   //进入虚拟主机配置

common日志格式格式改成combined日志格式

 

blob.png

4.检验语法及重新加载配置

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

5.curl做一下访问动作后再 ,查看日志

cat  /usr/local/apache2.4/logs/abc.com-access_log

blob.png 

 

blob.png