"1、简述DNS服务,并搭建DNS服务器,实现主从,子域授权。
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。
DNS中的正向搜索域和反向搜索域
①正向搜索区域
功能:从域名解析到IP地址。
什么是正向搜索区域呢?
所谓正向搜索区域是指将域名解析为IP地址的过程。也就是说,当用户输入一个服务器域名时,借助于该记录可以将域名解析为IP地址,从而实现对服务器的访问。
②反向搜索区域
功能:从IP地址解析为域名。
在大部分的 DNS 搜索中,客户机一般执行正向搜索。
DNS 同时提供反向搜索,允许客户机根据一台计算机的IP 地址搜索它的DNS名称。
反向搜索的域名信息保存在反向搜索区域中。为进行反向搜索,需要在DNS服务器中创建反向搜索区域。
搭建DNS主服务器
首先同步下时间
[root@DNS-Master ~]# hwclock -s
检查一下安装环境所需要的开发包组、确保所依赖的开发包组都装有了
[root@DNS-Master ~]# yum -y groupinstall "Development Tools"
[root@DNS-Master ~]# yum -y groupinstall "Server Platform Development"
[root@DNS-Master ~]# yum grouplist
装好后查看一下、最主要两项:Development tools和Server Platform Development
这里注意一下,我们要去编译安装一个服务、首先要去看他的README、然后看他的INSTALL、大体了解一下有没有我们所需要的信息、当然我们这里就不多说了、直接往下走:
[root@DNS-Master ~]# tar -zvxf bind-9.10.5-P3.tar.gz
[root@DNS-Master ~]# cd bind-9.10.5-P3
[root@DNS-Master bind-9.10.5-P3]# ./configure --prefix=/data/bind9 --sysconfdir=/etc/named --enable-threads --enable-epoll --disable-chroot
[root@DNS-Master bind-9.10.5-P3]# make && make install
--prefix=/data/bind9:指定编译存放的路径
--sysconfdir=/etc/named:指定配置文件存放路径
--enable-threads:启用了多线程的功能
前面说过、编译安装named什么都得自己创建、用户也没有的、所以我们得给他创建一个用户先、而且用户是系统用户、要加-r、系统用户不会给他创建家目录的:
先创建用户组:
[root@DNS-Master ~]# groupadd -g 53 -r named
[root@DNS-Master ~]# useradd -g named -r named
先去创建named的工作目录、然后创建named.ca这个文件:
[root@DNS-Master ~]# mkdir /var/named
这里@后面的IP是能访问互联网的服务器、生成的数据存在到/var/named/named.ca中去(使用"yum -y install bind-utils"命令安装dig命令)
[root@DNS-Master ~]# dig -t NS . @8.8.8.8 > /var/named/named.ca
[root@DNS-Master ~]# cat /var/named/named.ca
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> -t NS . @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36220
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;. IN NS
.......
.......
然后再去编辑/etc/named/named.conf的配置文件、这个文件也没有、需要自己去编写的:
[root@DNS-Master ~]# vim /etc/named/named.conf
options {
listen-on port 53 { any; }; //默认是any,表示允许所有网段的主机。可以改成自己所在的内网网段
listen-on-v6 port 53 { ::1; };
directory "/var/named"; //定义named的固定工作路径
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; //表示接收所有网段
recursion yes;
forward first; //下面这两行配置很重要,这个配置后,当客户端采用我们自己配置的内网DNS的NS服务器后,当访问别的网站,内网NS解析不了的就转发给8.8.8.8的DS服务器解析,保证能正常上网。
forwarders {
223.5.5.5; //阿里云的DNS服务器
223.6.6.6;
8.8.8.8;
8.8.4.4;
};
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." {
type hint;
file "named.ca";
};
zone "wangshibo.cn" { //定义一个统一的域名后缀。正向解析的区域。此处可以加后面IN,也可以不加IN
type master; //类型属于master、属于自己的
file "wangshibo.cn_zone"; //指定正向解析的文件
allow-transfer {192.168.1.28;}; //允许192.168.1.28(从DNS服务器)传送
};
zone "1.168.192.in-addr.arpa" { //定义反向解析的区域,注意写法。此处可以在后面加IN,也可以不加IN
type master;
file "192.168.1.zone"; //指定正向解析的文件
allow-transfer {192.168.1.28;};
zone "33.168.192.in-addr.arpa" {
type master;
file "192.168.33.zone";
allow-transfer {192.168.1.28;};
};
zone "34.168.192.in-addr.arpa" {
type master;
file "192.168.34.zone";
allow-transfer {192.168.1.28;};
};
zone "64.168.192.in-addr.arpa" {
type master;
file "192.168.64.zone";
allow-transfer {192.168.1.28;};
};
这里注意一下:
如果是多个网段的反向解析,这里就定义多个反向解析区域。
----------------------------------------------------------------------------------------------------------
温馨提示:
DNS BIND之forwarder转发:就是说,当自己内网NS服务器解析不了的域名,转发到别的NS如8.8.8.8的域名服务器上进行解析。
转发功能可以用来在一些服务器上产生一个大的缓存,从而减少到外部服务器链路上的流量。它可以使用在和internet没有直接连接的内部域名服务器上,用来提供对外部域名的查询。
只有当服务器是非授权的,并且缓存中没有相关记录时,才会进行转发。
1)转发机制
当你设置了转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的DNS转发器上,由这台DNS来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。
因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。
2)配置参数
1.forward
此选项只有当forwarders列表中有内容的时候才有意义。当值是First,默认情况下,使服务器先查询设置的forwarders,如果它没有得到回答,服务器就会自己寻找答案。如果设定的是only,
服务器就只会把请求转发到其它服务器上去。
2.forwarders
设定转发使用的ip地址。默认的列表是空的(不转发)。转发也可以设置在每个域上,这样全局选项中的转发设置就不会起作用了。用户可以将不同的域转发到服务器上,或者对不同的域可以实现
forward only或first的不同方式,也可以根本就不转发。
注:转发服务器的查询模式必须允许递归查询(即,recursion yes;),默认递归查询是开启的。
3)转发器的配置格式
options {
forward first;
forwarders{
8.8.8.8;
1.8.8.8;
};
};
注意:转发器本身不用做任何设置,而是对需要转发器的其他DNS server做以上配置。还有,如果该 DNS Server 无法联系到转发器,那么BIND会自己尝试解析。
如果要禁止BIND在无法联系到转发器时不做任何操作,那么你还可以使用 forward only 命令,这样BIND只能使用区的权威数据和缓存来响应查询了( 在连接不到转发器的情况下 )。
options {
forward only;
forwarders{
8.8.8.8;
1.8.8.8;
};
};
在 BIND 8.2 以后引入了一个新的特性:转发区( forward zone ),它允许你把 DNS 配置成只有查找特定域名的时候才使用转发器。( BIND 9 从9.1.0 才开始有转发区功能)
例如,你可以使你的服务器将所有对test.com结尾的域名查询都转发给test.com的两台名字服务器:
zone "test.com" {
type forward;
forwarders{
8.8.8.8;
1.8.8.8;
};
};
还有一种转发区设置和刚才的设置刚好相反,它允许你设置什么样的查询将不被转发,当然这只适用于在options语句中指定了转发器的 DNS 。配置如下:
options {
forwarders{
8.8.8.8;
1.8.8.8;
};
};
zone "test.com" {
type master;
file "zone.test.com";
forwarders {};
};
在test.com这个区中,你授权了几个子域,例如:zx.test.com、lab.test.com等,那么在test.com的权威服务器上设置转发后,因为对 zx.test.com、lab.test.com这几个子域不是权威,
那么如果有对 www.zx.test.com这样的子域的域名查询,服务器也将转发。这完全是没有必要的,因为服务器上就有zx.test.org 子域的 NS 记录,何须再转发。
---------------------------------------------------------------------------------------------------------------
如果想用rndc远程登录可以生成一个/etc/named/rndc.conf的配置文件:
[root@DNS-Master ~]# /data/bind9/sbin/rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
到这里别忘了给named.conf和rndc.conf修改属主属组和权限:
[root@DNS-Master ~]# chown -R root.named /data/bind9
[root@DNS-Master ~]# chown -R root.named /etc/named
[root@DNS-Master ~]# chown -R root.named /var/named #另外注意:一定要保证/var/named/data的权限是named.named,这个目录下存放的是named.run,即named解析日志
[root@DNS-Master ~]# chmod 640 /etc/named/named.conf
[root@DNS-Master ~]# chmod 640 /etc/named/rndc.conf
[root@DNS-Master ~]# chmod 640 /var/named/*
为了方便、我们在PATH下加个的路径、/etc/profile.d/named.sh:
[root@DNS-Master ~]# cat /etc/profile.d/named.sh
export PATH=/data/bind9/bin:/data/bind9/sbin:$PATH
[root@DNS-Master ~]# source /etc/profile.d/named.sh
因为是一个服务、所以我们要为他提供一个服务脚本、以后可以利用脚本启动、编辑/etc/rc.d/init.d/named:
[root@DNS-Master ~]# vim /etc/rc.d/init.d/named
#!/bin/bash
#
# description: named daemon
# chkconfig: - 25 88
pidFile=/data/bind9/var/run/named.pid
lockFile=/var/lock/subsys/named
confFile=/etc/named/named.conf
[ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
start() {
if [ -e $lockFile ]; then
echo "named is already running..."
exit 0
fi
echo -n "Starting named:"
daemon --pidfile "$pidFile" /data/bind9/sbin/named -u named -c "$confFile"
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
touch $lockFile
return $RETVAL
else
rm -f $lockFile $pidFile
return 1
fi
}
stop() {
if [ ! -e $lockFile ]; then
echo "named is stopped."
fi
echo -n "Stopping named:"
killproc named
RETVAL=$?
echo
if [ $RETVAL -eq 0 ];then
rm -f $lockFile $pidFile
return 0
else
echo "Cannot stop named."
failure
return 1
fi
}
restart() {
stop
sleep 2
start
}
reload() {
echo -n "Reloading named: "
killproc named -HUP
RETVAL=$?
echo
return $RETVAL
}
status() {
if pidof named &> /dev/null; then
echo -n "named is running..."
success
echo
else
echo -n "named is stopped..."
success
echo
fi
}
usage() {
echo "Usage: named {start|stop|restart|status|reload}"
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
restart ;;
status)
status ;;
reload)
reload ;;
*)
usage
exit 4 ;;
esac
[root@DNS-Master ~]# chmod 755 /etc/rc.d/init.d/named
[root@DNS-Master ~]# chkconfig --add named
[root@DNS-Master ~]# chkconfig --list named
下面开始配置正向解析配置:
[root@DNS-Master ~]# vim /var/named/wangshibo.cn_zone //这个文件是在上面named.conf里面定义的
$TTL 1D //定义宏,通用变量,单位为秒(S)、小时(H),天数(D)
@ IN SOA ns1.wangshibo.cn. root. ( //此处一般是写NS域名,邮件域名,或root.
2017071111 //序列号。这个参数很重要,要特别注意!!当主DNS修改解析文件时,必须要修改这个序列号,然后重启named服务后,从DNS才能正常同步过去!!
2H //刷新时间
10M //失败重试时间
7D //过期时间
1D ) //否定答案时间
@ IN NS ns1.wangshibo.cn.
@ IN NS ns2.wangshibo.cn. //注意域名后面的.不能忘掉!
ns1 IN A 192.168.1.27
ns2 IN A 192.168.1.28
www IN A 192.168.4.21 //由于已经定义了根域名是wangshibo.cn,所以这里可以直接写域名前面的名称,也可以全部写出来。比如www或者写成www.wangshibo.cn.
nginx-web01 IN A 192.168.4.21 //如果写域名前的名称,就不需要带.符号,但如果是写域名全称,则需要带.符号,如nginx-web01.wangshibo.cn.
nginx-web02 IN A 192.168.4.22
athena-web02 IN A 192.168.33.31
www-web01 IN A 192.168.34.29
www-web02 IN A 192.168.34.30
zabbix IN A 192.168.1.21
zrx-web01 IN A 192.168.34.33
zrx-web02 IN A 192.168.34.32
athena-matrix02 IN A 192.168.33.36
lx-db126 IN A 192.168.8.126
lx-db127 IN A 192.168.8.127
反向解析的配置(这里只列举一个):
[root@DNS-Master ~]# cat 192.168.1.zone
$TTL 600
@ IN SOA ns1.wangshibo.cn. root. (
2017071101
2H
10M
7D
1D )
@ IN NS ns1.wangshibo.cn.
@ IN NS ns2.wangshibo.cn.
27 IN PTR ns1.wangshibo.cn.
28 IN PTR ns2.wangshibo.cn.
21 IN PTR www.wangshibo.cn.
21 IN PTR zp.wangshibo.cn.
29 IN PTR puppet01.wangshibo.cn.
30 IN PTR puppet02.wangshibo.cn.
-------------------------------------------------------------------------------------------------------
温馨提示1:
对于主DNS的正反向解析文件中的序列号,每当做一次修改后,必须要同时修改这个序列号,这样才能触发主从同步机制!然后重启named服务,从DNS服务器那边才能同步过去,否则不能完成主从同步!
-------------------------------------------------------------------------------------------------------
然后修改一下权限和属主属组:
[root@DNS-Master ~]# chown root:named /var/named/wangshibo.cn_zone
[root@DNS-Master ~]# chmod 640 /var/named/wangshibo.cn_zone
检查主配置文件和区域数据文件有没有语法错误:
[root@DNS-Master ~]# named-checkconf //这个是检查主配置文件语法的
[root@DNS-Master ~]#
这个是检查区域数据文件语法的、指定区域和指定文件
[root@DNS-Master ~]# named-checkzone "wangshibo.cn" /var/named/wangshibo.cn_zone
zone wangshibo.cn/IN: loaded serial 2017071111
OK
启动服务后、解析域名
[root@DNS-Master ~]# /etc/init.d/named start
[root@DNS-Master ~]# /etc/init.d/named status
[root@DNS-Master ~]# /etc/init.d/named restart
然后修改自己的DNS,进行正反向解析
[root@DNS-Master ~]# cat /etc/resolv.conf
domain wangshibo.cn //域名和查询都要写成内网DNS的主域名
search wangshibo.cn
nameserver 192.168.1.27
[root@DNS-Master ~]# ping zrx-web02
PING zrx-web02.wangshibo.cn (192.168.34.32) 56(84) bytes of data.
64 bytes from 192.168.34.32: icmp_seq=1 ttl=62 time=1.11 ms
64 bytes from 192.168.34.32: icmp_seq=2 ttl=62 time=0.542 ms
[root@BJLX_16_27_V named]# dig -t A www.wangshibo.cn @192.168.1.27
; <<>> DiG 9.10.5-P3 <<>> -t A www.wangshibo.cn @192.168.1.27
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32976
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.wangshibo.cn. IN A
;; ANSWER SECTION:
www.wangshibo.cn. 86400 IN A 192.168.4.21
;; AUTHORITY SECTION:
wangshibo.cn. 86400 IN NS ns2.wangshibo.cn.
wangshibo.cn. 86400 IN NS ns1.wangshibo.cn.
;; ADDITIONAL SECTION:
ns1.wangshibo.cn. 86400 IN A 192.168.1.27
ns2.wangshibo.cn. 86400 IN A 192.168.1.28
;; Query time: 0 msec
;; SERVER: 192.168.1.27#53(192.168.1.27)
;; WHEN: Thu Jul 20 10:45:15 CST 2017
;; MSG SIZE rcvd: 124
[root@BJLX_16_27_V named]# nslookup
> set q=A
> www
Server: 192.168.1.27
Address: 192.168.1.27#53
Name: www.wangshibo.cn
Address: 192.168.4.21
> zabbix
Server: 192.168.1.27
Address: 192.168.1.27#53
Name: zabbix.wangshibo.cn
Address: 192.168.1.21
> lx-db126
Server: 192.168.1.27
Address: 192.168.1.27#53
Name: lx-db126.wangshibo.cn
Address: 192.168.8.126
> 192.168.1.27
Server: 192.168.1.27
Address: 192.168.1.27#53
27.16.192.168.in-addr.arpa name = ns1.wangshibo.cn.
> 192.168.1.21
Server: 192.168.1.27
Address: 192.168.1.27#53
21.16.192.168.in-addr.arpa name = www.wangshibo.cn.
21.16.192.168.in-addr.arpa name = zp.wangshibo.cn.
>
最后,客户机就可以修改自己的/etc/resolv.conf文件,然后使用这个内网DNS了
[root@Nginx-web1 ~]# cat /etc/resolv.conf
domain wangshibo.cn //域名和查询都要写成内网DNS的主域名
search wangshibo.cn
nameserver 192.168.1.27
[root@Nginx-web1 ~]# ping zabbix
PING zabbix.wangshibo.cn (192.168.1.21) 56(84) bytes of data.
64 bytes from www.wangshibo.cn (192.168.1.21): icmp_seq=1 ttl=64 time=0.282 ms
64 bytes from www.wangshibo.cn (192.168.1.21): icmp_seq=2 ttl=64 time=0.223 ms
64 bytes from www.wangshibo.cn (192.168.1.21): icmp_seq=3 ttl=64 time=0.177 ms
搭建DNS从服务器
[root@DNS-Slave ~]# hwclock -s
[root@DNS-Slave ~]# yum -y groupinstall "Development Tools"
[root@DNS-Slave ~]# yum -y groupinstall "Server Platform Development"
[root@DNS-Slave ~]# yum grouplist
[root@DNS-Slave ~]# tar -zvxf bind-9.10.5-P3.tar.gz
[root@DNS-Slave ~]# cd bind-9.10.5-P3
[root@DNS-Slave bind-9.10.5-P3]# ./configure --prefix=/data/bind9 --sysconfdir=/etc/named --enable-threads --enable-epoll --disable-chroot
[root@DNS-Slave bind-9.10.5-P3]# make && make install
[root@DNS-Slave ~]# groupadd -g 53 -r named
[root@DNS-Slave ~]# useradd -g named -r named
[root@DNS-Slave ~]# mkdir /var/named
[root@DNS-Slave ~]# dig -t NS . @8.8.8.8 > /var/named/named.ca
[root@DNS-Slave ~]# vim /etc/named/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes;
forward first;
forwarders {
8.8.8.8;
8.8.4.4;
};
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "wangshibo.cn" IN {
type slave;
file "wangshibo.cn_zone";
masters {172.168.1.27;};
};
zone "16.29.172.in-addr.arpa" IN {
type slave;
file "172.168.1.zone";
masters {172.168.1.27;};
};
将主DNS的/etc/init.d/named启动脚本拷贝到从DNS服务器上。
[root@DNS-Slave ~]# cat /etc/init.d/named
#!/bin/bash
#
# description: named daemon
# chkconfig: - 25 88
pidFile=/data/bind9/var/run/named.pid
lockFile=/var/lock/subsys/named
confFile=/etc/named/named.conf
[ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
start() {
if [ -e $lockFile ]; then
echo "named is already running..."
exit 0
fi
echo -n "Starting named:"
daemon --pidfile "$pidFile" /data/bind9/sbin/named -u named -c "$confFile"
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
touch $lockFile
return $RETVAL
else
rm -f $lockFile $pidFile
return 1
fi
}
stop() {
if [ ! -e $lockFile ]; then
echo "named is stopped."
fi
echo -n "Stopping named:"
killproc named
RETVAL=$?
echo
if [ $RETVAL -eq 0 ];then
rm -f $lockFile $pidFile
return 0
else
echo "Cannot stop named."
failure
return 1
fi
}
restart() {
stop
sleep 2
start
}
reload() {
echo -n "Reloading named: "
killproc named -HUP
RETVAL=$?
echo
return $RETVAL
}
status() {
if pidof named &> /dev/null; then
echo -n "named is running..."
success
echo
else
echo -n "named is stopped..."
success
echo
fi
}
usage() {
echo "Usage: named {start|stop|restart|status|reload}"
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
restart ;;
status)
status ;;
reload)
reload ;;
*)
usage
exit 4 ;;
esac
启动named服务
[root@DNS-Slave ~]# /etc/init.d/named start/status/restart
启动后,就会发现在从DNS的/var/named目录下自动产生了wangshibo.cn_zone和192.168.1.zone的正反向解析文件
注意:当主DNS修改解析配置时,只需要将解析配置文件中的序列号改动下,就会自动触发主从同步机制!
[root@DNS-Slave ~]# ls
192.168.1.zone wangshibo.cn_zone data db-9TWfGmpO db-kHbKJg9L named.ca
然后修改从的自己的DNS
[root@DNS-Slave ~]# cat /etc/resolv.conf
search wangshibo.cn
nameserver 192.168.1.28
然后测试正反向解析:
[root@DNS-Slave ~]# ping athena-web02
PING athena-web02.wangshibo.cn (192.168.33.31) 56(84) bytes of data.
64 bytes from 192.168.33.31: icmp_seq=1 ttl=62 time=0.712 ms
64 bytes from 192.168.33.31: icmp_seq=2 ttl=62 time=0.442 ms
[root@DNS-Slave ~]# nslookup
> lx-db127
Server: 192.168.1.28
Address: 192.168.1.28#53
Name: lx-db127.wangshibo.cn
Address: 172.29.8.127
> 192.168.1.28
Server: 192.168.1.28
Address: 192.168.1.28#53
28.16.29.172.in-addr.arpa name = ns2.wangshibo.cn.
这样,客户机可以将自己的DNS修改为上面配置的内网主从DNS地址
[root@test ~]# cat /etc/resolv.conf
#domain wangshibo.cn
search wangshibo.cn
nameserver 172.168.1.27
nameserver 172.168.1.28
2、简述HTTP服务,并实现基于用户的访问控制,虚拟主机,https"
超文本传输协议HTTP规定了浏览器与服务器之间的请求和响应的格式与规则,它是万维网上能够可靠地交换文件的重要基础。
HTTP的操作过程
浏览器分析指向页面的URL
浏览器向DNS系统请求解析域名所对应的服务器IP地址
DNS系统解析出服务器的IP,并返回给主机
浏览器与该服务器的进程建立TCP链接(三次握手,端口默认为80)
浏览器发出HTTP请求:如GET /article/index.html
服务器收到请求并作出相应处理,把文件index.html发送给浏览器
释放TCP链接(四次握手)
浏览器解析index.html文件,将web页显示出来。
HTTP协议的特点
HTTP协议是无状态的,即多次访问一个服务器上的页面,服务器并不知道你曾经访问过,每次访问的响应都当做第一次访问一样。所以,在实际应用中,通常使用CooKie加数据库的方式记录和跟踪用户的活动。
HTTP有非持久连接和持久连接:
采用非持久连接时,网页的每个元素对象(如.png,jpeg图等)的传输都需单独建立一个TCP连接(第三次握手可携带请求信息)
采用持久连接时,仅需建立一次TCP连接,服务器发送响应后仍保持连接,客户和服务器可以继续在这条连接上发送请求和响应报文。
Cookie以及其作用
CooKie是由服务器生成,但存储在用户主机上的文本文件,它保存了服务器和客户之间传递的状态信息,作为识别用户的手段。通过Cookie服务器就能从数据库中查询该用户的活动记录,进而可以执行一些个性化操作
HTTP请求报文中常见的几个方法
方法 意义
GET 请求读取由URL所标志的信息
HEAD 请求读取由URL所标志的信息的首部
POST 给服务器添加信息
CONNECT 用于代理服务器
get和post方法的区别:
一般我们在浏览器输入一个网址访问网站都是GET请求;在FORM表单中,可以通过设置Method指定提交方式为GET或POST,默认时为GET提交方式。
get请求一般不会修改服务器的信息,仅用于请求页面;post请求可能会修改服务器中的资源信息,如提交评论、博客等都是通过post请求实现。
get请求的信息附加在URL后面,这些被显示的暴露在外面。post请求的数据放在包体中,不容易暴露,因此一般用户登录等保密性高的不宜采用get请求,而用post请求。
1.基于apache建立虚用户
提供两个基于名称的虚拟主机www1, www2;有单独的错误日志和访问日志;
先建立虚拟主机www1
a.在httpd的辅助配置文件目录/etc/httpd/conf.d/中创建属于虚拟主机自己的配置文件
~]# vim /etc/httpd/conf.d/vhosts-www1.conf
DocumentRoot "/myweb/vhosts/www1"
ServerName www.link1.com
ErrorLog "/myweb/vhosts/www1/logs/error_log"
CustomLog "/myweb/vhosts/www1/logs/access_log" combined
AllowOverride None
Options None
Require all granted
b.创建好配置文件后,再创建文档根目录及日志目录,修改日志文件读写权限
重新载入配置文件
systemctl reload httpd.service
2.http用户权限管理
修改www1的配置文件如下:
DocumentRoot "/myweb/vhosts/www1"
ServerName www.link1.com
ErrorLog "/myweb/vhosts/www1/logs/error_log"
CustomLog "/myweb/vhosts/www1/logs/access_log" combined
AllowOverride None
Options None
AuthType basic
AuthName "Please input user and password to login,only link has permission to access!!"
AuthUserFile /etc/httpd/users/.htpasswd
Require user link
a-2.使用htpasswd命令创建虚拟用户
~]# mkdir /etc/httpd/users
~]# htpasswd -c -m /etc/httpd/users/.htpasswd link
~]# htpasswd -m /etc/httpd/users/.htpasswd link1
实现了登录用户权限管理功能
3.为上面的www2虚拟主机提供https服务
创建私有CA,然后再为本服务器颁发自签证书。
a.创建私有CA
a-1.创建私有CA私钥文件
~]# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
a-2.生成自签证书
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3653
a-3.满足CA所必须的目录级文件和文本文件的布局
~]# touch /etc/pki/CA/index.txt
~]# echo 01 > /etc/pki/CA/serial
b.为服务器提供证书
b-1.创建服务器的私钥文件
~]# mkdir /etc/httpd/conf/ssl
~]# cd /etc/httpd/conf/ssl
ssl]# (umask 077 ; openssl genrsa -out httpd.key 4096)
b-2.生成证书请求文件
ssl]# openssl req -new -key httpd.key -out httpd.csr -days 3653
b-3.由CA签发证书:在CA所在的服务器上完成
ssl]# openssl ca -in httpd.csr -out httpd.crt -days 365
至此证书颁发完成。
c.安装mod_ssl模块
yum -y install mod_ssl
修改ssl的配置文件的部分内容如下:
SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt
AllowOverride None
Options None
Require all granted
DocumentRoot "/myweb/vhosts/ssl"
ServerName www.link2.com
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key
然后再创建/myweb/vhosts/ssl目录
~]# mkdir /myweb/vhosts/ssl
~]# echo "welcome to https://www.link2.com" >> /myweb/vhosts/ssl/index.html
实现https