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>
最终保存配置如下:
1.1 用Apache自带命令htpasswd创建密码文件.htpasswd包含用户和密码:
/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd cfk
1.2 查看密码文件是否生成,查看生成用户和密码:
1.3 再增加一个用户如下:
/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd pme
说明:
-c:是创建加密文件;
-m:是指定md5加密类型;
指定用户为pme(PS:如果再次新增用户,就不需要再加-c ,因为已经创建过密码文件了);
1.4 检查语法和加载配置文件
/usr/local/apache2.4/bin/apachectl -t //检查语法
/usr/local/apache2.4/bin/apachectl graceful //加载配置
1.5检测配置是否生效(401状态码)
curl -x47.97.163.117:80 111.com
访问111.com,出现401状态码,说明访问的这个域名需要用户认证
1.5.1 在本地windows系统里做hosts解析111.com
路径:C:\Windows\System32\drivers\etc
格式:47.97.163.117 111.com
定义完本地hosts后,用浏览器访问111.com网站时就会出现用户认证,用户密码就是刚才增加的用户和设置的密码
1.6 使用curl -x输入用户名密码访问 (200状态码)
curl -x127.0.0.1:80 -upme:123 111.com -I
状态码变成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>
最终保存配置如下:
2.1 检查语法和加载配置文件
/usr/local/apache2.4/bin/apachectl -t //检查语法
/usr/local/apache2.4/bin/apachectl graceful //加载配置
2.2 在111.com目录下编辑创建测试文件123.php
vim /data/wwwroot/111.com/123.php
2.3 用curl -x访问验证是否成功:
curl -x127.0.0.1:80 111.com -I //不用-u加用户和密码了,也可以访问,出现200状态码
curl -x127.0.0.1:80 111.com/123.php -I //但是访问文件123.php时就出现401了,说明需要用户认证了
curl -x127.0.0.1:80 -ucfk:123123 111.com/123.php -I //只有用-u加用户和密码才能正常访问123.php,状态码200
curl -x127.0.0.1:80 -uxie:xie 111.com/123.php //直接通过验证访问123.php
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>
最终配置如下:
2. 检测语法及重新加载配置
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
3.检测apache是否加载了rewrite模块。
/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
3.1 若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#
vi /usr/local/apache2.4/conf/httpd.conf (进入配置文件,搜索rewrite,删除前面的#号让成生效)
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
5.curl 测试跳转结果是否为301状态码
curl -x127.0.0.1:80 123.com -I
说明:
-I 不显示访问内容,只看状态码
404 这个页面不存在
301 永久跳转
401 用户密码验证,密码验证不对就401,验证对了就200
403 把granted改成denied就会403
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
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
访问日志记录用户的每一个请求说明如下:
%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日志格式
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
转载于:https://blog.51cto.com/404006045/2121841