2018.3.2 10周3次课

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.3.2 10周3次课相关的知识,希望对你有一定的参考价值。

十周三次课(3月2日)

11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志

11.18 Apache用户认证

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

  • 先对123.com站点做一个安全的用户认证 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把111.com那个虚拟主机编辑成如下内

<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>

  • 创建密码文件:

/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming  

htpasswd命令为创建用户的工具,-c为create(创建),-m指定密码加密方式为MD5,

/data/.htpasswd为密码文件,aming为要创建的用户。第一次执行该命令需要加-c。第二次再创建新的用户时,就不用加了-c,否则/data/.htpasswq文件会被重置,之前的用户被清空

技术分享图片

  • 重新加载配置-t , graceful

技术分享图片

  • 绑定hosts,浏览器测试

配置完成后,需要到宿主机(你的真实电脑Windows)上去修改一下hosts文件,类似Linux上的 etc/hosts,把111.com域名指向你的这台Linux机器,这样才能通过浏览器访问到111.com。 Windows上的hosts文件所在路径为C:\Windows\System32\dnvers\etc\hosts:

192.168.37.101  111.com

技术分享图片

  • curl -x127.0.0.1:80 111.com    //状态码为401,说明访问的内容需要用户认证

技术分享图片

curl -x127.0.0.1:80 111.com –I   //查看状态码信息

技术分享图片

  • curl -x127.0.0.1:80 -uaming:123456 111.com     //状态码为200,-u是输入用户名,:是输入密码

技术分享图片

  • 还可以针对单个文件进行认证

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf   //把111.com那个虚拟主机编辑成如下内容

<VirtualHost *:80>

   DocumentRoot "/data/wwwroot/111.com"

   ServerName 111.com

   ServerAlias www.example.com

   #<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>

   ErrorLog "logs/111.com-error_log"

   CustomLog "logs/111.com-access_log" common

</VirtualHost>

技术分享图片

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

技术分享图片

直接访问不需要输入用户名和密码,状态码是200

技术分享图片

访问123.php时状态码出现401  //我们对123.php做了限制。要指定用户名和密码。

技术分享图片

技术分享图片

11.19/11.20 域名跳转

用www.lishiming.net访问的时候,浏览器里面的网址直接变成了ask.apelearn.com这其实就是域名的跳转过程。做域名跳转有什么用呢?主要有两方面的作用:

第一 ,一个站点有多个域名会对SEO有影响,说白了就是百度搜索关键词的排名有影响,如果把多个域名全部跳转到指定的一个域名,这样以这个域名为中心,就可以把权重集中在这个域名上,所以搜索关键词的排名也就靠前了;

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

需求,把123.com域名跳转到www.123.com,配置如下:

<VirtualHost *:80>

   DocumentRoot "/data/wwwroot/111.com"

   ServerName 111.com

   ServerAlias www.example.com

   #<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满足条件    

       RewriteRule ^/(.*)$ http://111.com/$1  //定义rewrite规则,当满足上面的条件时,这条规则才会执行

   </IfModule>

   ErrorLog "logs/111.com-error_log"

   CustomLog "logs/111.com-access_log" common

</VirtualHost>

在RewriteRule里是有正则表达式存在的,RewriteRu1e后面由空格划分成三部分,第一部分为当前的URL(也就是网址),不过这个URL是不把主机头(也就是域名)算在内的。第二部分为要跳转的目标地址,这个地址可以写全(包含了主机头),当然也可以不加主机头,默认就是前面定义的ServerName。第三部分为一些选项,需要用方括号括起来,301为状态码,它称作“永久重定向"(还有一种跳转用的状态码为302,叫作“临时重定向"),L表示"last",意思是跳转一次就结束了。

以111.com/123.php为例:

^/表示不是111.com开头,(.*)表示是123.php ,跳转到http://111.com/,$1就是前面第一个(.*)这部分。每个()代表着一个整体, $1对应第一个小括号,$2对应第二个小括号

  • 检测和加载配置:

技术分享图片

  • 要实现域名跳转,需要有rewrite模块支持,所以先查看httpd是否已经加载该模块,如果没有还需要配置:

技术分享图片

没有任何输出,说明没有加载该模块

加载rewrite模块

vi /usr/local/apache2.4/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so   //去掉行首的#

技术分享图片

  • 测试

查看状态码:301

技术分享图片

查看内容

技术分享图片

11.21 Apache访问日志

访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题,比如当有攻击时,是可以通过查看日志看到一些规律的。要配置httpd访问日志,首先要在主配置文件中定义访问日志的格式,可以看到两个格式的日志,建议使用第一个,记录的信息会更全。

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

日志位置:ls /usr/local/apache2.4/logs/

技术分享图片

查看实验机的日志内容:cat /usr/local/apache2.4/logs/111.com-access_log

技术分享图片

打开主配置文件:vim /usr/local/apache2.4/conf/httpd.conf   //搜索LogFormat,默认用的是common

技术分享图片

%h为访问网站的IP;

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

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

%t为时间 ;

%r为请求的动作( 比如用curl -I时就为HEADE );

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

%b 为传输数据大小;

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

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

对于这个日志格式,你可以自定义调整各个字段的位置,也可以额外增加其他字段,比如可以增加%D(请求耗费时间)。在工作中并没有更改过它,默认的日志格式就够用

  • 编辑虚拟主机配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

CustomLog "logs/111.com-access_log" combined   //common更改为combined

技术分享图片

技术分享图片

查看日志文件:cat /usr/local/apache2.4/logs/111.com-access_log

技术分享图片


以上是关于2018.3.2 10周3次课的主要内容,如果未能解决你的问题,请参考以下文章

2018-3-2 10周3次课 Apache用户认证域名跳转Apache访问日志

2018.3.1 10周2次课

2018.1.24 7周3次课

2018.1.31 8周3次课

2018.3.5 10周4次课

2018.1.10 5周3次课