14.HTTP

一、HTTP

 

实验环境准备:防火墙默认区域设置为trusted
虚拟机server
[root@server0 ~]# firewall-cmd --set-default-zone=trusted 

虚拟机desktop
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted 

######################################################

基本的Web服务

Web通信基本概念
• 基于 B/S (Browser/Server)架构的网页服务
– 服务端提供网页
– 浏览器下载并显示网页

• Hyper Text Markup Language(html),超文本标记语言
• Hyper Text Transfer Protocol(http),超文本传输协议

 

一、构建基本的Web服务

虚拟机server
1.安装httpd服务端软件
[root@server0 ~]# yum -y install httpd

2.重起httpd服务
[root@server0 ~]# systemctl restart  httpd
[root@server0 ~]# systemctl enable  httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service

3.书写页面文件
]# echo '<h1>My Frist Web' > /var/www/html/index.html
]# cat /var/www/html/index.html

]# firefox 172.25.0.11

######################################################

RHEL7中的Web服务


• 软件包:httpd
• 系统服务:httpd
• 提供的默认配置

– Listen:监听地址:端口(80)
– ServerName:本站点注册的DNS名称(空缺)
– DocumentRoot:网页文件根目录(/var/www/html)


  DNS服务器:虚拟机classroom
             server0.example.com
             www0.example.com
             webapp0.example.com

#####################################################
DocumentRoot:网页文件根目录(/var/www/html)
虚拟机server

  • 1.修改配置文件 /etc/httpd/conf/httpd.conf

 DocumentRoot  "/var/www/myweb"   #改变网页文件存放路径

  • 2.重起httpd服务

]# mkdir /var/www/myweb
]# echo '<h1> wo shi myweb' > /var/www/myweb/index.html
]# systemctl restart httpd

  • 3.访问测试

]# firefox  172.25.0.11          

#####################################################

网络路径与实际路径

客户端:firefox 172.25.0.11:80----》服务端 httpd ----》DocumentRoot /var/www/myweb

客户端:firefox 172.25.0.11/nsd
服务端 : /var/www/myweb/nsd

客户端:firefox 172.25.0.11/abc
服务端 : /var/www/myweb/abc

客户端:firefox 172.25.0.11/var/www/myweb
服务端 : /var/www/myweb/var/www/myweb
##################################################
客户端:firefox 172.25.0.11/abc
服务端 : /var/www/myweb/abc

虚拟机server:
]# mkdir /var/www/myweb/abc
]# echo '<h1>wo shi abc' > /var/www/myweb/abc/index.html

]# firefox 172.25.0.11/abc


虚拟Web主机

   由同一台服务器提供多个不同的Web站点

• 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机

#################################################

构建基于域名的虚拟主机                   

<VirtualHost IP地址:端口>             
   ServerName 此站点的DNS名称
   DocumentRoot 此站点的网页根目录
</VirtualHost>

<VirtualHost  *:80>
   ServerName  www.nb.com
   DocumentRoot  /var/www/abc
</VirtualHost>

 

  • • 配置文件路径

– /etc/httpd/conf/httpd.conf   #主配置文件
– /etc/httpd/conf.d/*.conf     #调用配置文件

虚拟机server                                     
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf 
 <VirtualHost  *:80>    #开启虚拟主机,在所有IP地址上启用80端口
   ServerName server0.example.com   #指定访问的域名
   DocumentRoot /var/www/qq         #指定网页文件路径
 </VirtualHost>
 <VirtualHost  *:80>
   ServerName www0.example.com
   DocumentRoot /var/www/baidu
 </VirtualHost>

[root@server0 ~]# mkdir /var/www/qq /var/www/baidu
[root@server0 ~]# echo '<h1>企鹅' > /var/www/qq/index.html
[root@server0 ~]# echo '<h1>百度' > /var/www/baidu/index.html
[root@server0 ~]# systemctl restart httpd
[root@desktop0 ~]# firefox server0.example.com
[root@desktop0 ~]# firefox www0.example.com

当一旦使用了虚拟Web主机的功能,所有的页面都要用虚拟Web主机方式呈现
虚拟机server                                     
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost  *:80>
  ServerName server0.example.com
  DocumentRoot /var/www/qq
</VirtualHost>
<VirtualHost  *:80>
  ServerName www0.example.com
  DocumentRoot /var/www/baidu
</VirtualHost>
<VirtualHost  *:80>
  ServerName webapp0.example.com
  DocumentRoot /var/www/myweb
</VirtualHost>

##################################################

网页内容访问

  • 客户机地址限制

• 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的ACL访问权限
– 除非针对子目录有明确设置

 <Directory 目录的绝对路径>
   .. ..
  Require all denied|granted
  Require ip IP或网段地址 .. ..
 </Directory>

  Require all denied     #拒绝所有人访问
  Require all granted    #允许所有人访问
  Require ip 172.25.0.11  #仅172.25.0.11进行访问

######################################################
 <Directory /opt>
   Require all denied   
 </Directory>
 <Directory /opt/web>
   Require all granted   
 </Directory>

     /opt/web/index.html  #可以访问
     /opt/nsd/index.html  #不可以访问

####################################################
案例3:配置网页内容访问
在 Web 网站 http://server0.example.com 的
DocumentRoot 目录下创建一个名为 private 的子目录
要求如下:
1.查看http://server0.example.com 的DocumentRoot 目录
[root@server0 ~]# cat /etc/httpd/conf.d/nsd01.conf 
<VirtualHost  *:80>
  ServerName server0.example.com
  DocumentRoot /var/www/qq
</VirtualHost>
[root@server0 ~]# mkdir /var/www/qq/private
[root@server0 ~]# echo '<h1>wo shi private' > /var/www/qq/private/index.html
[root@server0 ~]# cat /var/www/qq/private/index.html

[root@server0 ~]# firefox server0.example.com/private

2.从 server0 上,任何人都可以浏览 private 的内容,
但是从其他系统不能访问这个目录的内容
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf 
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf 
<Directory /var/www/qq/private>
    Require ip 172.25.0.11       #仅允许172.25.0.11
</Directory>
[root@server0 ~]# systemctl restart httpd

虚拟机desktop:
[root@desktop0 ~]# firefox server0.example.com/private
Forbidden

You don't have permission to access /private/ on this server.

######################################################
案例4:使用自定Web根目录
调整 Web 站点 http://server0.example.com 的网页
目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页文件目录

虚拟机server:
1.创建新的目录
]# mkdir /webroot
]# echo '<h1>wo shi webroot' > /webroot/index.html
]# cat /webroot/index.html

2.修改配置文件                    
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost  *:80>
  ServerName server0.example.com
  DocumentRoot /webroot       #修改存放网页文件的路径
</VirtualHost>

[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf 
 ......
 <Directory /webroot>
     Require all granted     #允许所有人进行访问
 </Directory>

[root@server0 ~]# systemctl restart httpd

3.修改SELinux策略,安全上下文策略(标识)
]# semanage  fcontext  -l  |  less    #查看安全上下文值
]# ls -Zd   /var/www/     #查看目录的上下文值
]# ls -Zd   /webroot/     #查看目录的上下文值

• 方式1:参照标准目录,重设新目录的属性
– chcon [-R] --reference=模板目录   新目录

]# chcon -R  --reference=/var/www/  /webroot
]# ls -Zd /webroot
]# firefox  server0.example.com

#####################################################
部署动态网站

静态网站的运行
• 服务端的原始网页 = 浏览器访问到的网页
– 由Web服务软件处理所有请求
– 文本(txt/html)、图片(jpg/png)等静态资源

动态网站的运行
• 服务端的原始网页 ≠ 浏览器访问到的网页
– 由Web服务软件接受请求,动态程序转后端模块处理
– PHP网页、Python网页、JSP网页......

以webapp0.example.com部署动态网站 
虚拟机server:
1.下载Python网页文件
[root@server0 ~]# cat /etc/httpd/conf.d/nsd01.conf
<VirtualHost  *:80>
  ServerName webapp0.example.com
  DocumentRoot /var/www/myweb
</VirtualHost>

]# cd /var/www/myweb/
]# wget http://classroom.example.com/pub/materials/webinfo.wsgi

]# cat webinfo.wsgi 

]# firefox webapp0.example.com/webinfo.wsgi

2.为了方便客户端的访问,页面跳转(网页别名 地址重写)

firefox webapp0.example.com --> /var/www/myweb/weninfo.wsgi

   配置字段格式:   Alias  网络路径    实际路径
   当用户采用的是这个"网络路径",则跳转到"实际路径"

[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf

<VirtualHost  *:80>
  ServerName webapp0.example.com
  DocumentRoot /var/www/myweb
  Alias   /    /var/www/myweb/webinfo.wsgi

   当用户直接访问网页文件根目录时,则呈现/var/www/myweb/weninfo.wsgi页面内容

</VirtualHost>

[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# firefox webapp0.example.com

3.安装软件mod_wsgi翻译Python页面代码
[root@server0 ~]# yum -y install mod_wsgi
[root@server0 ~]# rpm -q  mod_wsgi
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf 
<VirtualHost  *:80>
  ServerName webapp0.example.com
  DocumentRoot /var/www/myweb
  WsgiScriptAlias /   /var/www/myweb/webinfo.wsgi
</VirtualHost>

[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# firefox webapp0.example.com
  显示内容:
    Unix时间戳:自1970-1-1 0:0:0到现在,所经历的秒数
  
4.此虚拟主机侦听在端口8909 (SELinux非默认端口的开放)     
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf

Listen 8909             #针对httpd程序
<VirtualHost  *:8909>   #针对虚拟web主机提供网站
  ServerName webapp0.example.com
  DocumentRoot  /var/www/myweb
  WsgiScriptAlias  /   /var/www/myweb/webinfo.wsgi
</VirtualHost>

]# semanage port -l | grep http
]# semanage port -a -t http_port_t   -p tcp 8909
           -a:添加   -t:类型   -p:协议

]# systemctl restart httpd
]# firefox webapp0.example.com:8909
######################################################
  客户端访问端口的优先级最高,其次是第一个虚拟Web主机

 

 

二、安全WEB服务

 

安全Web服务

协议:
    https:安全的超文本传输协议
      默认端口:443

PKI公钥基础设施
• Public Key Infrastructure,公钥基础设施
– 公钥:主要用来加密数据
– 私钥:主要用来解密数据(与相应的公钥匹配)
– 数字证书:证明拥有者的合法性/权威性(单位名称、
有效期、公钥、颁发机构及签名、......)
– Certificate Authority,数字证书授权中心:负责证书
的申请/审核/颁发/鉴定/撤销等管理工作


数字证书授权中心:虚拟机classroom

构建安装的Web
虚拟机server:

  • 1.安装httpd软件包

 ]# yum -y install httpd

  • 2.安装mod_ssl提供安全加密程序

 ]# yum -y install mod_ssl
 ]# rpm -ql mod_ssl         #显示软件包安装清单
 /etc/httpd/conf.d/ssl.conf

  • 3.部署网站证书(营业执照)

]# cd /etc/pki/tls/certs/
]# wget http://classroom.example.com/pub/tls/certs/server0.crt

]# ls 

  • 4.部署根证书(工商局信息)                          

]# cd /etc/pki/tls/certs/
]# wget http://classroom.example.com/pub/example-ca.crt
]# ls 

  • 5.部署私钥(用于解密)

]# cd /etc/pki/tls/private/
]# wget http://classroom.example.com/pub/tls/private/server0.key

]#  ls

  • 6.修改配置文件,指定安全配置信息

[root@server0 ~]# vim /etc/httpd/conf.d/ssl.conf 
补充: 末行模式下  输入  :set  nu  开启行号功能

 59 DocumentRoot  "/var/www/html"
 60 ServerName  www0.example.com:443  #指定进行加密通信的域名

指定网站证书
100 SSLCertificateFile /etc/pki/tls/certs/server0.crt
指定私钥
107 SSLCertificateKeyFile /etc/pki/tls/private/server    0.key
指定根证书
122 SSLCACertificateFile /etc/pki/tls/certs/example-c    a.crt

  • 7.重起httpd服务

[root@server0 ~]# systemctl restart httpd

  • 8.验证:

[root@server0 ~]# firefox https://www0.example.com
     选择----->我已充分了解可能的风险----->确认安全例外
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值