11.18 Apache用户认证
11.19/11.20 域名跳转
11.21 Apache访问日志
11.18 httpd的用户验证
在生产环境中某些后台的网页往往需要设置用户验证,这样可以保护网页不会因为个人的失误导致数据的丢失,这样可以提高安全性
配置文件
我们这里以test2站点做用户验证 在test2的<VirtualHost>
里面加上以上配置1
2
3
4
5
6
7<Directory /var/www/test2.conm>
AllowOverride AuthConfig
AuthName "test2.com user auth"
AuthType Basic
AuthUserFile /var/.htpasswd
require valid-user
</Directory>
建立用户密码文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/htpasswd -c -m /var/.htpasswd test1 新建文件和建立用户test1 |
-c
创建新文件 -m
密码加密
加载配置文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |
测试
在windows使用浏览器打开test2.com
在linux使用curl命令-I
实现网页的状态码1
2
3
4
5
6[root@localhost ~]# curl -x 192.168.80.101:80 test2.com -I
HTTP/1.1 401 Unauthorized
Date: Sun, 27 May 2018 12:19:52 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
WWW-Authenticate: Basic realm="test2.com user auth"
Content-Type: text/html; charset=iso-8859-1
-u
用户名:密码 使用用户登录1
[root@localhost ~]# curl -x 192.168.80.101:80 -utest1:123456 test2.com
上述是针对整个目录认证 也可以针对单个文件认证
配置文件
1 | <FilesMatch test.php> |
这里使用<FilesMatch>
来指定某个文件 其实<Directory>
<DirectoryMatch>
都是指定某个目录 <Files>
<FilesMatch>
都是指定某个文件 唯一不同点在于<DirectoryMatch>
<FilesMatch>
可以直接使用正则表达式 而<Directory>
<Files>
使用正则表达式 要再其前加~
例如 <Files ~"^\.ht">
以.ht开头的文件
加载配置文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |
新建test.php文件
1 | [root@localhost ~]# vim /var/www/test2.com/test.php |
测试
1 | [root@localhost ~]# curl -x192.168.80.101:80 test2.com |
11.19/11.20 域名跳转
有时候两个域名的网页内容一样,在搜索引擎眼里认为两个域名的权重一样,那其中有一个是错的网站。为了让搜索引擎认为这个域名就是同一个网站,就使用域名跳转,使得次域名的权重降低而提升到主域名上,因此就使用域名跳转技术
配置文件
我们这里用test1站点为例 在test1的<VirtualHost>
里面加上以上配置1
2
3
4
5<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^test1.com$
RewriteRule ^/(.*)$ http://test1.com/$1 [R=301,L]
</IfModule>
!^test1.com$
表示非test1.com ^/(.*)$
表示域名/后面的部分 $1
表示前面的小括号
加载模块
去/usr/local/apache2.4/conf/httpd.conf
下 把rewrite
模块的#去掉
加载配置文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |
测试
在windows使用浏览器打开www.example.com跳转到test1.com
在linux使用curl命令1
2
3
4
5
6[root@localhost ~]# curl -x192.168.80.101:80 www.example.com -I
HTTP/1.1 301 Moved Permanently
Date: Sun, 27 May 2018 23:41:48 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Location: http://test1.com/
Content-Type: text/html; charset=iso-8859-1
网页状态码
状态码 | 含义 |
---|---|
200 | 请求成功 |
301 | 永久重定向 网站权重会变 |
302 | 临时重定向 网站权重不变 |
304 | 表示用户访问的文件没变化 |
401 | 服务器拒绝验证 |
403 | 服务器拒绝请求 |
404 | 没找到文件 |
500 | 服务器上有语法错误 |
11.21 Apache访问日志
访问日志是记录每一次访问服务器的请求,我们在定义虚拟主机的时候已经定义好访问日志的路径和格式了1
CustomLog "logs/test2.com-access_log" common
访问日志是记录在/usr/local/apache2.4/logs/
目录下的 common
是日志格式的一种
看看test2.com的访问日志1
2
3192.168.80.1 - - [29/May/2018:04:06:56 +0800] "GET / HTTP/1.1" 200 5
192.168.80.1 - - [29/May/2018:04:06:56 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.80.101 - - [29/May/2018:04:07:36 +0800] "HEAD HTTP://test2.com/ HTTP/1.1" 200 -
访问的IP
登录的用户
访问时间
记录服务器收到的请求类型
访问的域名
http版本
状态码
大小
我们也可以去httpd.conf里面指定 LogFormat更改访问日志的记录格式1
2LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
combined格式中的Referer
是告诉服务器 是从哪个页面链接过来的 User-Agent
用户代理是告诉服务器用户的使用的操作系统版本 浏览器类型等信息
默认都是使用common 这里我们使用combined格式 只要在虚拟主机上的CustomLog 后面改为combined即可
这里我把test2的访问日志改为combined1
CustomLog "logs/test2.com-access_log" combined
加载配置
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |
测试
在浏览器和用curl命令访问服务器在去看看日志1
2192.168.80.101 - - [29/May/2018:04:41:59 +0800] "HEAD HTTP://test2.com/ HTTP/1.1" 200 - "-" "curl/7.29.0"
192.168.80.1 - - [29/May/2018:04:42:11 +0800] "GET / HTTP/1.1" 200 5 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"
第一条可以看出来使用curlml访问的 第二条是用浏览器CHrome访问的