用户认证
为了某些网站的安全需要,特意授权特定用户访问,因此产生了网站访问的用户认证机制。我们可以针对某个站点进行认证,也可以指定某个目录,或者是一个文件。编辑虚拟主机配置文件: vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
<Directory /data/wwwroot/www.123.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "123.com user auth" //自定义认证的用户名
AuthType Basic //认证的类型,一般为Basic
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
</VirtualHost>
/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd lv
//指定用户,创建密码。
重新加载配置-t , graceful
绑定hosts,浏览器测试
curl -x127.0.0.1:80 123.com //状态码为401
curl -x127.0.0.1:80 -lv:lvlinux 123.com //状态码为200
如果要针对一个目录做认证,比如要对www.123.com/admin/目录做认证,只需要修改一个地方就可以。把<Directory /data/wwwroot/www.123.com>改为<Directory /data/wwwroot/www.123.com/admin/>. 如果要针对某个文件做认证,则要使用filematch功能,具体配置如下。
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
<FilesMatch admin.php>
AllowOverride AuthConfig
AuthName "123.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
</VirtualHost>
域名跳转
我们知道我们在百度这种搜索引擎上访问某个域名,都会被爬虫记录,某个域名的访问量越大,越容易被搜索。比如有一个网站最开始注册的域名是A,后来我们又重新起了个比较好的域名B,要让B域名访问到该网站,我们只需要简单的给A域名做一个域名别名B就可以,但是这样爬虫记录的会是两个域名,因此我们的访问量被两个域名分摊了,那么我们如何在爬虫眼里增加我们A域名的权重呢?那就需要将B域名跳转到A域名。这样一来新用户记住了一个更有价值的域名,我们的访问量也集中到了一起。域名跳转也叫域名重定向。 需求,把123.com域名跳转到www.123.com,配置如下:
<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>
上面的rewrite 配置意思是,当使用域名别名访问过来时,我们自动跳转到服务器域名。用curl访问会看到我们定义的状态码301,如果用浏览器访问会发现ip将自动跳转。 /usr/local/apache2/bin/apachectl -M|grep -i rewrite //若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的# curl -x127.0.0.1:80 -I 123.com //状态码为301
访问日志
访问日志记录用户的每一个请求 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 主配置文件提供了两种访问日志格式让我们选择,其中虚拟主机里面默认的是common, 我们看到combined 格式更丰富一些,他多了referer 和 user-agent,我们将编辑虚拟主机配置文件,将common更改为combined ,重新访问测试,查看日志。 把虚拟主机配置文件改成如下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
CustomLog "logs/123.com-access_log" combined
</VirtualHost>
重新加载配置文件 -t,graceful
curl -x127.0.0.1:80 -I 123.com
tail /usr/local/apache2.4/logs/123.com-access_log