fqdn组成: 主机名或别名加上域名组合而成
需要把一个fqdn,转换成ip地址才能进行找到机器进行访问,把域名转换成IP地址就叫名字解析,比如之前的/etc/hosts
分散式的名字解析方案:
这个文件需要在每个电脑上维护,分散在每个主机上的,分布式的解决方案
缺点: 是如果一个主机的主机名或ip发生变化,那就要更新所有主机的文件,主机越多,维护量太大,
所以有集中式解决方案:
专门找一个主机,搭建数据库,IP地址和主机名
但是这样的主机,放在互联网,数据太庞大,性能差,放在中国美国等都i是问题
完全集中只适合中小型环境,互联网超大环境就需要另外的
既分散又集中的解决方案,DNS服务
DNS服务:Domain Name Service 应用层协议
C/S,53/udp,53/tcp
BIND:Bekerly Internet Name Domain
ISC(www.xxx.org)
本地名称解析配置文件
/etc/hosts
%WINDIR%/system32/drivers/etc/hosts
122.10.111.110 www.exchangeideas,cn
93.46.8.89 www.google.com
跟域
一级域名:TOP Level Domain:tld
com,edu,mil,gov,net,org,int,arpa
三类:组织与、国家域(.cn,.ca,.hk,.tw)、反向域
二级域名
三级域名
最多127级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)
互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及跟服务器系统的管理
根服务器在互联网上有13个IP地址,(13个集群服务器(是因为数据报文的局限只能放13个服务器
10台在美国,1台在日本,1台在荷兰,1个在瑞典
dns跟控制权是美国人说了算的
(以前宣称美国政府交由第三方管理
但是叙利亚,美国曾让只要是叙利亚后缀的域名都不让访问
好消息是现在大力推广ipv6地址。
又新增了25组dns跟服务器(雪人计划)
其中中国有一个主服务器和3个从服务器
这里讲的管理都是企业内部的管理,上千台机器,内部也是通过名字管理的不是IP地址,所以大公司都回配置基础的dns服务
数据包的报文大小决定了不能放太多根服务器,类似mbr,64个字节只能放4个主分区
跟域
name:某主机的FQDN,例如www.exchangeideas.cn,
value:主机名对应主机的IP地址
例如:
www.exchangeideas.cn. IN A 1.1.1.1
www.exchangeideas.cn. IN A 2.2.2.2
mx1.exchangeideas.cn. IN A 3.3.3.3
mx2.exchangeideas.cn. IN A 4.4.4.4
G E N E R A T E 1 − 254 H O S T S GENERATE1-254 HOSTS GENERATE1−254HOSTS IN A 1.2.3.$ $就代表从1~254之间循环
*.exchangeideas.cn. IN A 5.5.5.5
exchangeideas.cn. IN A 6.6.6.6
name:当前区域的名字
value:当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
例如:
exchangeideas.cn. IN MX 10 mx1.exchangeideas.cn.
www.exchangeideas.cn. IN MX 20 mx1.exchangeideas.cn.
注意:
(1)对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
name:当前区域的名字,例如“exchangeideas.cn.”
value:有多部分组成
(1)当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2)当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如 xxxxedi.exchangedieas.com
(3)主从服务器区域传输相关定义以及否定的答案的统一的TTL
例如:
exchange.com. 86400 IN SOA dns1.exchange.com. admin.exchange.com.
( 1 序列号
1D 刷新时间
2H 重试时间
3D 过期回见
1H 否定答案的TTL值)
#sos起始授权记录必须有,记录谁是主服务器,邮箱地址 (版本号1,同步时间一天,同步失败2小时重试,失败三天从服务器失效,缓存有效期1小时)
资源记录定义的格式:
语法:name[TTL] IN rr_type value
注意:
(1)TTL可从全局继承
(2)@可用于引用当前区域的名字
(3)同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
(4)同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
区域解析库:由众多RR组成
资源记录:Resource Record,RR
记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
A:internet Address,作用,FQDN–>IP
AAAA:FQDN–>IPV6
PTR:PoinTeR,IP–>FQDN
NS:Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX:Mail eXchanger,邮件交换器
AAAA:
name:FQDN
value:IPv6
PTR:
name:IP,有特定格式,把ip地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value:FQDN
例如:
4.3.2.1.in-addr.arpa.IN PTR www.exchangeideas.com.
如1.2.3为网络地址,可简写成:
4 IN PTR www.exchangeideas.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写
负责本地域名的正向和反向解析库
正向区域
反向区域
CNAME:
name:别名的FQDN
value:真正名字的FQDN
例如:www.exchangedieas.cn. IN CNAME websrv.exchangeideas.cn.
name:当前区域的名字
value:当前区域的某DNS服务器的名字,例如ns.exchangeideas.cn.
注意:一个区域可以有多个NS记录
例如:
exchangeideas.cn. IN NS ns1.exchangeideas.cn.
exchangeideas.cn. IN NS ns2.exchangeideas.cn.
注意:
(1)相邻的两个资源记录的name相同时,后续的可省略
(2)对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录
一次完整的查询请求经过的流程:
Client–>hosts文件–>DNS Service Local Cache --> DNS Server(recursion) -->Server Cache --> iteration(迭代)–> 根 -->顶级域名DNS–>二级域名DNS…
解析答案:
肯定答案:
否定答案:请求的条目不存在等原因导致无法返回结果
肯定答案:
肯定答案:
区域传输
完全传输:传送整个解析库
增量传输:传递解析库变化的那部分内容
Domain:Fully Qualified Domain Name
正向:FQDN–>IP
反向:IP–>FQDN
负责本地域名的正向和反向解析库
正向区域
反向区域
子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权
类似根域授权tld:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
magedu.com. 在.com的名称服务器上,解析库中添加资源记录
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
magedu.com. IN NS ns3.magedu.com.
ns1.magedu.com. IN A 3.3.3.1
ns2.magedu.com. IN A 3.3.3.2
ns3.magedu.com. IN A 3.3.3.3
glue record:粘合记录,父域授权子域的记录
服务脚本和名称: /etc/rc.d/init.d/named /usr/lib/systemd/system/named.service
主配置文件: /etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
解析库文件: /var/named/ZONE_NAME.ZONE
注意:
(1) 一台物理服务器可同时为多个区域提供解析
(2) 必须要有根区域文件;named.ca
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
rndc: remote name domain controller,
默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
提供辅助性的管理功能;953/tcp
配置文件
主配置文件:
全局配置: options {};
日志子系统配置: logging {};
区域定义: 本机能够为哪些zone进行解析,就要定义哪些zone
zone “ZONE_NAME” IN {};
注意: 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听
在一个能与外部主机通信的IP地址上
缓存名称服务器的配置:
监听外部地址即可
dnssec: 建议关闭dnssec,设为no
dig [-t type] name [@SERVER] [query options]
dig只用于测试dns系统,不会查询hosts文件进行解析
查询选项:
+[no]trace:跟踪解析过程 : dig +trace magedu.com
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP = dig –t ptr reverseip.in-addr.arpa
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
dig -t axfr magedu.com @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
host [-t type] name [SERVER]
host –t NS magedu.com 172.16.0.1
host –t soa magedu.com
host –t mx magedu.com
host –t axfr magedu.com
host 1.2.3.4
nslookup命令: nslookup [-option] [name | -] [server]
• 交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
30.155作为主服务器,30.236作为备用服务器
-第一步搭建1个主域服务器
1.安装bind
yum install bind -y
2.修改配置文件 named.conf
vi /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; }; 注释掉
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 { localhost; }; 注释掉
allow-transfer {192.168.30.236;}; 由于要搭建从服务器,就需要只允许这台从服务器传输
3.修改配置文件 named.rfc1912.zones
vi /etc/named.rfc1912.zones
添加一个域
zone "exchange.com" IN {
type master;
file "exchange.com.zone"; 数据解析文件的文件名
};
4.创建解析文件
vi /var/named/exchange.com.zone
$TTL 1D
@ IN SOA dns1.exchange.com. admin.exchange.com. (1 1D 2H 3D 1H) #sos起始授权记录必须有,记录谁是主服务器,邮箱地址 (版本号1,同步时间一天,同步失败2小时重试,失败三天从服务器失效,缓存有效期1小时)
NS dns1 有两个服务器 1,2
NS dns2
dns1 A 192.168.30.155 主服务器地址
dns2 A 192.168.30.236 从服务器地址
websrv A 192.168.30.243 web服务器1
websrv A 192.168.30.244 web服务器2
www CNAME websrv 别名
#保存之后
还需要改变文件的属性,所属组和权限
chgrp named /var/named/exchange.com.zone
chmod 640 /var/named/exchange.com.zone
5.检查配置文件是否正确,启动服务
named-checkconf
named-checkzone "exchange.com.zone" /var/named/exchange.com.zone
无问题,启动服务
service bind start
6.用客户端测试是否能够访问,访问成功则继续下一步
dig www.exchange.com @192.168.30.155
出现 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16285 则成功,如果出现refused 是拒绝访问需要查看配置文件
-第二步搭建1个从域服务器
1.安装bind
yum install bind -y
2.修改配置文件 named.conf
vi /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; }; 注释掉
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 { localhost; }; 注释掉
allow-transfer {none;}; 从服务器,不需要其他机器来从它这里传输,保证安全性
3.修改配置文件 named.rfc1912.zones
vi /etc/named.rfc1912.zones
添加一个域
zone "exchange.com" {
type slave; 类型是从
masters {192.168.30.155;}; 主服务器地址
file "slaves/exchange.com.zone.slave";
};
4.启动服务,检查是否生成从服务器文件
server bind start
ll /var/named/slaves/slaves/exchange.com.zone.slave 如果这个文件没有就需要检查配置文件问题,和与主服务器网络是否能ping通
5.用客户端测试是否能够访问,访问成功则继续下一步
dig www.exchange.com @192.168.30.236
出现 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16285 则成功,如果出现refused 是拒绝访问需要查看配置文件
-第三步实现子域
exchangeideas是com的下级域,也叫子域(www.exchangeideas.com.
想创建bj的子域www.bj.exchangedieas.com.
如果只有一个主机,完全可以再数据库文件修改
$TTL 1D
@ IN SOA dns1.exchange.com. admin.exchange.com. (1 1D 2H 3D 1H) #sos起始授权记录必须有,记录谁是主服务器,邮箱地址 (版本号1,同步时间一天,同步失败2小时重试,失败三天从服务器失效,缓存有效期1小时)
NS dns1 有两个服务器 1,2
NS dns2
dns1 A 192.168.30.155 #主服务器地址
dns2 A 192.168.30.236 #从服务器地址
websrv A 192.168.30.243 #web服务器1
websrv A 192.168.30.244 #web服务器2
www CNAME websrv #别名
www.bj A 1.1.1.1 #子域服务器 (这就是单个主机)
但是一般子域里存放的主机不会就这么一台,还可以这么做
vim exchange.com.zone
$TTL 1D
@ IN SOA dns1.exchange.com. admin.exchange.com. (1 1D 2H 3D 1H) #sos起始授权记录必须有,记录谁是主服务器,邮箱地址 (版本号1,同步时间一天,同步失败2小时重试,失败三天从服务器失效,缓存有效期1小时)
NS dns1
NS dns2
bj NS dns3
dns1 A 192.168.30.155 #主服务器地址
dns2 A 192.168.30.236 # 从服务器地址
dns3 A 2.2.2.2 # 子域服务器地址
websrv A 192.168.30.243 #web服务器
www CNAME websrv #别名
删除刚才的记录
把这个域独立出来,把它当成一个独立的区域来建立
cp exchange.com.zone bj.exchange.com.zone -p 保留原来属性
vim bj.exchange.com.zone
$TTL 1D
@ IN SOA dns1.bj.exchange.com. admin.bj.exchange.com. (1 1D 2H 3D 1H)
NS dns1
dns1 A 2.2.2.2
websrv A 2.2.2.2
www CNAME websrv
在配置文件加上域
vim /etc/named.frc1912.zones
zone "bj.exchange.com" {
type master;
file "named,loacalhost";
allow-update{none;};
};
子域的创建,需要去更改关键的内容
vim /etc/named.conf
dnssec-enable no;
dnssec-validation no;
重新启动服务
server bind restart
用客户端测试是否能够访问,访问成功则继续下一步
dig www.bj.exchange.com @2.2.2.2
出现 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16285 则成功,如果出现refused 是拒绝访问需要查看配置文件
提供http服务的软件有很多,apache只是其中一个,还有nginx,传统公司用apahce比较多,互联网的用nginx比较多
跨网络都涉及到2个进程如何通讯,一般都用tcpip协议,所以一般都是基于套接字进行通讯,
两个主机跨网络如何找对对方,就需要套接字socket
套接字就是ip地址加协议端口
通过ip地址可以找到网络中唯一的设备,通过端口就确定了在这台主机上的应用程序地址(不会有两个进程使用同一个端口号),这两个要素组合成socket
从外面浏览器如果访问京东网站,就需要访问京东对应的套接字
浏览器输入www.jd.com
前端利用dns解析把www.jd.com解析成地址,
利用地址找到京东网站的主机,找到主机,因为写的是http://
tcp/ip协议的默认端口号是80,通过ip地址再加上tcp的端口号80就找到了web服务器地址
53是dns服务端口,tcp,udp
每个引用程序,需要有一个socket套接层,这个套接层,把不同的应用程序加以区分(协议和端口号,比如tcp的80端口(到达套接字,就知道是给tcp还是mysql的进程))
http本质通讯过程也是基于socket 的
刚开始创建socket套接字
ip和端口号绑定
开启监听,等待链接
客户端也需要创建一个socket,利用connect链接函数,连接到服务器端,
一旦链接起来以后,双方就会发送数据
工作机制:
http请求:http request
http响应:http response
一次http事务:请求<–>响应
Web资源:web resource
一个网页由多个资源构成,打开一个页面,会有多个资源展示出来,但是每个资
源都要单独请求。因此,一个“Web 页面”通常并不是单个资源,而是一组资源
的集合
静态文件:无需服务端做出额外处理
文件后缀:.jpg, .html, .txt, .js, .css, .mp3, .avi
动态文件:服务端执行程序,返回执行的结果
文件后缀:.asp, .php, .jsp
提高HTTP连接性能
并行连接:通过多条TCP连接发起并发的HTTP请求
持久连接:keep-alive,长连接,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
管道化连接:通过共享TCP连接发起并发的HTTP请求
复用的连接:交替传送请求和响应报文(实验阶段)
URI: Uniform Resource Identifier 统一资源标识,分为URL和URN
URN: Uniform Resource Naming,统一资源命名
示例: P2P下载使用的磁力链接是URN的一种实现
magnet:?xt=urn:btih:660557A6890EF888666
URL: Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
两者区别:URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址
URL组成
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
例如:https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_totalsales15_desc&trans=1
1、建立连接: 接收或拒绝连接请求
2、接收请求: 接收客户端请求报文中对某资源的一次请求的过程
Web访问响应模型(Web I/O)
单进程I/O模型: 启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
多进程I/O模型: 并行启动多个进程,每个进程响应一个连接请求
复用I/O结构: 启动一个进程,同时响应N个连接请求
实现方法: 多线程模型和事件驱动
多线程模型: 一个进程生成N个线程,每线程响应一个连接请求
事件驱动: 一个进程处理N个请求
复用的多进程I/O模型: 启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求
3、处理请求: 服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
元数据:请求报文首部
Host: www.echangeideas.cn 请求的主机名称
Server: Apache/2.4.7
HTTP常用请求方式,Method
GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
4、访问资源:
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
资源放置于本地文件系统特定的路径:DocRoot
DocRoot /var/www/html
/var/www/html/images/logo.jpg
http://www.baidu.com/images/logo.jpg
web服务器资源路径映射方式:
(a) docroot
(b) alias
© 虚拟主机docroot
(d) 用户家目录docroot
5、构建响应报文:
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
永久重定向:http://www.360buy.com
临时重定向:http://www.taobao.com
3)MIME类型:
Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时
显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型
类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)“最好”
6、发送响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了
7、记录日志
最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
在一些运维工作,有时候有一些自动化运维的管理,不是对外发布的,管理站点就希望只有特定的人才有权限看,这时候就可以用用户名密码做验证的方式实现
验证可以有几种方式,
1.明文
2.digest 摘要验证
一般用明文,实现如下
basic认证配置示例:
(1) 定义安全域
Options None
AllowOverride None
AuthType Basic
AuthName "String“ #描述文字
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
Require user username1 username2 ...
< /Directory >
允许账号文件中的所有用户登录访问:
Require valid-user
string 加上描述文字,
用户名密码从哪来,存放在专门的文件中/path/httpd_user_passwd_file(这个文件需要你手动创建)可以用htpasswd工具创建,这个命令可以创建放用户名密码的文本文件,第一次创建必须加-C
(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自动创建文件,仅应该在文件不存在时使用
-p:明文密码
-d:CRYPT格式加密,默认
-m:md5格式加密
-s: sha格式加密
-D:删除指定用户
.加.可以隐藏起来,文件名无所谓,指定用户名,输入密码就生成了
root@centos7 ~]#/htpasswd -c /etc/httpd.conf.d/.httpuser user1
New password:
Re-type new password:
Adding paaword for user user1
root@centos7 ~]#/htpasswd -c /etc/httpd.conf.d/.httpuser user2
New password:
Re-type new password:
Adding paaword for user user2
root@centos7 ~]#cat /etc/httpd/conf.d/.httpuser
user1:$apr1$sMK5av/u$tWxUX1EVIDWVXIDY.mUJz/
现在就添加了三个用户,那么到底谁能访问,require user 跟上你希望访问的用户名
创建个页面,假设是给特定的人才能访问
root@centos7 ~]#mkdir /data/website/admin
root@centos7 ~]#echo /data/website/admin/index.html > /data/website/admin/index.html
root@centos7 ~]#vim /etc/httpd/conf.d/test.conf
AuthType Basic
AuthName "welcome to access admin dir“ #描述文字
AuthUserFile "/etc/httpd.conf.d/.httpuser "
Require user user1 user2
< /Directory >
Require all granted
< /Directory >
重启服务
root@centos7 ~]#systemctl restart httpd
所谓虚拟主机就是在一个物理服务器上建立多个网站,现在想在一个服务器上搭建三个主页,需要各有各的主目录先建立三个主目录
站点标识: socket
IP相同,但端口不同 但是一般很少根据端口来区分网站,更多的还是敲名字
IP不同,但端口均为默认端口 这样做只能靠ip访问
FQDN不同: 请求报文中首部 Host: www.baidu.com
具体有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址
基于port:为每个虚拟主机使用至少一个独立的port
基于FQDN:为每个虚拟主机使用至少一个FQDN
注意: 一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机
禁用方法:注释中心主机的DocumentRoot指令即可
浏览器输入www.a.com,发送请求 报文的时候,报文头部就是www.a.com,服务器端看到a.com就返回a.com
本机上先配置hosts文件
root@centos7 ~]#/vim /etc/hosts
127.0.0.1 localhost.localdomain localhost localhost4.localdomain4 localhost4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain
192.168.30. 11 www.a.com www.b.com www.c.com
root@centos7 ~]#/curl www.a.com 测试
www.a.com
root@centos7 ~]#/curl www.b.com 测试
www.b.com
root@centos7 ~]#/curl www.c.com 测试
www.c.com
系统就是用主机头。来判断用户是访问的哪个网站
但是如果通过ip访问,默认访问的是配置文件排序在前的网站
root@centos7 ~]#/curl 192.168.30. 11 测试
www.a.com
root@centos7 ~]#/curl 192.168.30. 11 测试
www.a.com
root@centos7 ~]#/curl 192.168.30. 11 测试
www.a.com
修改配置文件
root@centos7 ~]#vim /etc/httpd/conf.d/test.conf
Require all granted
< /Directory >
DocumentRoot "/data/website2"
ServerName www.a.com
ErrorLog "logs/a.com.error_log"
Transfrerlog "logs/a.com-access_log"
DocumentRoot "/data/website3"
ServerName www.b.com
ErrorLog "logs/b.com.error_log"
Transfrerlog "logs/b.com-access_log"
DocumentRoot "/data/website1"
ServerName www.c.com
ErrorLog "logs/c.com.error_log"
Transfrerlog "logs/c.com-access_log"
重启服务
root@centos7 ~]#systemctl restart httpd
所以实现了虚拟主机后,谁排在前,谁就是默认网站,默认网站就是不通过名字访问,而是通过ip访问,加上之后,系统默认的/var/www/html也就失效了,我们看到的是第一个网页
centos6实现的时候有一点差别
需要取消注释才能支持虚拟主机,没有这一行就手动写
在生产中可以利用虚拟主机搭建测试环境
https:http over ssl
SSL会话的简化过程
(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端
(3) 客户端取得证书并进行证书验证
如果信任给其发证书的CA
(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
(b) 验证证书的内容的合法性:完整性验证
© 检查证书的有效期限
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,
完成密钥交换
(5) 服务用此密钥加密用户请求的资源,响应给客户端
注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机
客户端发送请求要用ssl压缩,服务器端收到请求,会把自己的证书发过来
客户端由于事先拥有了ca的证书,可以把服务器端发过来的证书进行验证,解密,得到服务器端的公钥,
得到公钥后,就可以拿服务器的公钥进行加密,加密生成一个临时的秘钥(对称秘钥)进行通讯
HTTPS实现
(1) 为服务器申请数字证书
测试:通过私建CA发证书
(a) 创建私有CA
(b) 在服务器创建证书签署请求
© CA签证
https,实现,需要先申请一个证书,192.168.30.17当CA,192.168.30.7当客户端
先要自己创建私钥,然后弄自签名证书
root@centos7 ~]#cd /etc/pki/CA
root@centos7 CA]#(umask 077;openssl genrsa -out private/cakey.pem 2018) #创建私钥
下一步自签名 +x509代表自签名,key指定私钥文件,-out、生成自签名证书文件,-days指定有效期
root@centos7 CA]#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 #自签名证书
CA创建好了,还缺seriial (代表证书从多少开始)和index文件
root@centos7 CA]#touch index.txt
root@centos7 CA]#echo 01 > serial
接着客户端向服务器端申请证书
root@centos7 ~]#cd /etc/httpd/conf.d
root@centos7 conf.d]#mkdir ssl
root@centos7 conf.d]#cd ssl
root@centos7 ssl]#(umask 077;openssl genrsa -out httpd.key 1024) #创建私钥
root@centos7 ssl]#openssl req -new -key httpd.key -out httpd.csr #国家省,组织三项必须一致
csr有了,复制到服务器端,去做批准,颁发证书
root@centos7 ssl]scp httpd.csr 192.168.30.17:/etc/pki/CA/
颁发证书
root@centos7 CA]openssl ca -in httpd.csr -out certs/www.exchange.com.crt -days 720
复制证书到客户端
root@centos7 CA]scp certs/www.exchange.com.crt 192.168.30.7:/etc/httpd/conf.d/ssl
还需要把CA的钥匙复制过去
root@centos7 CA]scp cacert.pem 192.168.30.7:/etc/httpd/conf.d/ssl
(2) 配置httpd支持使用ssl,及使用的证书
yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile
(3) 测试基于https访问相应的主机
openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile
安装ssl模块
root@centos7 ssl]yum install mod_ssl
root@centos7 ssl] vim /etc/httpd/conf.d/ssl.conf
证书路径,和私钥路径
、需要修改成之前生成的
将http请求转发至https的URL
重定向
Redirect [status] URL-path URL
status状态:
Permanent:Returns a permanent redirect status (301) indicating that the resource has moved permanently
Temp:Returns a temporary redirect status (302). This is the default
示例:
Redirect temp / https://www.exchangeideas.cn/
root@centos7 ssl]vim /etc/httpd/conf.d/test.conf
redirect temp|permanent / http://www.exchangeideas,cn/ #permanent永久 temp临时
测试是否跳转
[root@agenitoe ~]# curl -I www.exchangeideas.cn
HTTP/1.1 302 #302代表临时
Date: Wed, 15 May 2019 05:19:24 GMT
Server: Apache
X-Powered-By: PHP/7.2.14