DNS和HTTP服务

  • 1、DNS服务,搭建DNS服务器,实现主从,子域授权
  • 2、简述HTTP服务,实现基于用户的访问控制,虚拟主机,https

DNS服务,搭建DNS服务器,实现主从,子域授权

DNS服务

FQDN全限定域名:同时带有主机名和域名的名称。(全称域名)

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

DNS域名

跟域
一级域名: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个主分区

搭建DNS服务器,实现主从,子域授权

A记录

跟域
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 GENERATE1254HOSTS IN A 1.2.3.$ $就代表从1~254之间循环
  *.exchangeideas.cn. IN A 5.5.5.5
   exchangeideas.cn. IN A 6.6.6.6

MX记录

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记录

SOA记录

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.

NS记录

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记录

DNS解析

一次完整的查询请求经过的流程:
  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:粘合记录,父域授权子域的记录

bind服务器

服务脚本和名称: /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服务,实现基于用户的访问控制,虚拟主机,HTTPS

提供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工作机制

工作机制:
  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组成
<scheme : //<user : <password @ <host :<port/<path;<params?<query#<frag
  schame:方案,访问服务器以获取资源时要使用哪种协议
  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

完整的http请求处理过程

1、建立连接: 接收或拒绝连接请求
2、接收请求: 接收客户端请求报文中对某资源的一次请求的过程
Web访问响应模型(Web I/O)
  单进程I/O模型: 启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
  多进程I/O模型: 并行启动多个进程,每个进程响应一个连接请求
  复用I/O结构: 启动一个进程,同时响应N个连接请求
     实现方法: 多线程模型和事件驱动
    多线程模型: 一个进程生成N个线程,每线程响应一个连接请求
     事件驱动: 一个进程处理N个请求
  复用的多进程I/O模型: 启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求
3、处理请求: 服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
  元数据:请求报文首部
   <method <URL <VERSION
   HEADERS 格式 name:value
   <request body
示例:
  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服务器会在日志文件中添加一个条目,来描述已执行的事务

HTTP状态码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基于用户的访问控制

在一些运维工作,有时候有一些自动化运维的管理,不是对外发布的,管理站点就希望只有特定的人才有权限看,这时候就可以用用户名密码做验证的方式实现
验证可以有几种方式,
1.明文
2.digest 摘要验证
一般用明文,实现如下

basic认证配置示例: 
(1) 定义安全域 
 <Directory “/path"> 
  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
 <Directory “/data/website/admin"> 
      AuthType Basic 
      AuthName "welcome to access admin dir“  #描述文字
      AuthUserFile  "/etc/httpd.conf.d/.httpuser " 
      Require  user user1   user2
     < /Directory > 
      <Directory “/data/website"> 
      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
      <Directory “/data/website"> 
      Require  all granted 
     < /Directory > 
     <Virtualhost *:80>
     	DocumentRoot  "/data/website2"
     	ServerName  www.a.com
     	ErrorLog "logs/a.com.error_log"
     	Transfrerlog "logs/a.com-access_log"
     </Virtualhost>
              <Virtualhost *:80>
     	DocumentRoot  "/data/website3"
     	ServerName  www.b.com
     	ErrorLog "logs/b.com.error_log"
     	Transfrerlog "logs/b.com-access_log"
     </Virtualhost>
              <Virtualhost *:80>
     	DocumentRoot  "/data/website1"
     	ServerName  www.c.com
     	ErrorLog "logs/c.com.error_log"
     	Transfrerlog "logs/c.com-access_log"
     </Virtualhost>

重启服务

root@centos7 ~]#systemctl restart httpd

所以实现了虚拟主机后,谁排在前,谁就是默认网站,默认网站就是不通过名字访问,而是通过ip访问,加上之后,系统默认的/var/www/html也就失效了,我们看到的是第一个网页

centos6实现的时候有一点差别
需要取消注释才能支持虚拟主机,没有这一行就手动写
在这里插入图片描述
在生产中可以利用虚拟主机搭建测试环境

实现HTTPS

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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值