14.HTTP

    xiaoxiao2023-09-26  150

    一、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)