两台虚拟机,均要检测

1.IP地址     ifconfig

2.是否可以解析,nslookup server0.example.com

3.Yum是否可用   yum repolist

4.防火墙默认区域修改为trusted

-------------------------------------------------------------------------------------------

HTTP服务基础

Web通信基本概念

基于 B/S (Browser/Server)架构的网页服务

B/S服务是C/S服务衍生出的

 – 服务端提供网页(下载提供相关服务的软件)

 – 浏览器下载并显示网页

HTML(Hyper Text Markup Language),超文本标记语言

编写网页的语言

作用:是静态网页文件的标记规范。


HTTP(Hyper Text Transfer Protocol),超文本传输协议,默认端口:80

客户端访问服务端网页需要通过此协议

作用:主要为网站服务器程序与浏览器之间传输网页定义相关的标准。


客户端通过浏览器访问,服务端通过软件包(httpd,nginx,tomcat等)提供相应服务



RHEL7的Web服务

软件包:httpd

系统服务:httpd

提供的默认配置

– Listen:监听地址:端口(80)

– ServerName:本站点注册的DNS名称(空缺)

– DocumentRoot:网页根目录(/var/www/html):存放网页程序的

举例https://zhidao.baidu.com/question/20112828.html

    https://zhidao.baidu.com/就是根目录

    https://zhidao.baidu.com/question/20112828.html根目录下的子目录


– DirectoryIndex:起始页/首页文件名(index.html)


默认站点域名的网页根目录是/var/www/html

-------------------------------------------------------------------------------------------

一、搭建基本Web服务

虚拟机Server0上:

 1.安装httpd软件

 2.启动httpd服务,并且设置 为开机自起

 3.书写 网页文件

 elinks:纯字符命令的浏览器

 elinks-dump(纯字符)

# echo Kobe Bryant > /var/www/html/index.html            #书写网页内容为Kobe Bryant


虚拟机Desktop0上:

# yum -y install elinks           #安装elinks软件包

# elinks -dump 172.25.0.11/server0.example.com      #IP或域名都行      

Kobe Bryant


------------------------------------------------------------------------------------------

– ServerName:本站点注册的DNS名称(空缺)

classroom默认分配的域名:server0.example.com

 www0.example.com

 webapp0.example.com



虚拟机Server0上:

1.修改主配置文件的内容/etc/httpd/conf/httpd.conf

  vim中命令行模式全文查找:/ServerName 


  95行: ServerName  server0.example.com:80


2.  重起httpd服务


虚拟机Desktop0上:

# elinks -dump server0.example.com



补充: vim 命令模式    

4yy:复制光标以下的4行

p:粘贴


------------------------------------------------------------------------------------------


– DocumentRoot:网页根目录(/var/www/html)


虚拟机Server0上:

1.修改主配文件的内容/etc/httpd/conf/httpd.conf

DocumentRoot  "/var/www/abc"

2.创建目录/var/www/abc

3.重起httpd服务

4.书写网页文件

# echo wo shi abc > /var/www/abc/index.html       


虚拟机Desktop0上:

# elinks  -dump  server0.example.com  


通过server0.example.com此域名将/var/www/abc/index.html此目录提供给客户端提供网页内容




补充:  ::1   #ipv6的本机回环测试


-------------------------------------------------------------------------------------------


虚拟Web主机

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



    区分方式

– 基于域名的虚拟主机

– 基于端口的虚拟主机

– 基于IP地址的虚拟主机


配置文件路径

– /etc/httpd/conf/httpd.conf   #主配置文件

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

主配置文件内容太多,庞杂,修改起来比较麻烦,可以用从配置文件调用主配置文件,简洁高效



man帮助文档:

#man /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf

<VirtualHost *:@@Port@@>

    ServerAdmin webmaster@dummy‐host2.example.com

    DocumentRoot "@@ServerRoot@@/docs/dummy‐host2.example.com"

    ServerName dummy‐host2.example.com

    ErrorLog "/var/log/httpd/dummy‐host2.example.com‐error_log"

    CustomLog "/var/log/httpd/dummy‐host2.example.com‐access_log"

common </VirtualHost>

在从配置文件中修改:

1.建立从配置文件

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

 <VirtualHost   *:80>

    DocumentRoot   /var/www/test      #域名对应的网页根目录

    ServerName   www0.example.com

 </VirtualHost>


 <VirtualHost   *:80>

    DocumentRoot   /var/www/nsd

    ServerName   webapp0.example.com

 </VirtualHost>


2. 建立目录及相应的网页内容

#mkdir /var/www/test

#mkdir /var/www/nsd

# echo wo shi test > /var/www/test/index.html

# echo wo shi nsd > /var/www/nsd/index.html

3. 重起httpd服务




-------------------------------------------------------------------------------------------

  启用虚拟Web主机,所有的站点都必须用虚拟Web主机来实现


保证 server0.example.com可以访问


1.修改从配置文件

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

  追加写入


 <VirtualHost   *:80>

    DocumentRoot   /var/www/abc

    ServerName   server0.example.com

 </VirtualHost>


2. 重起httpd服务


虚拟机Desktop0上:

# elinks  -dump  server0.example.com 

  

-------------------------------------------------------------------------------------------

 httpd服务访问控制(ACL)


虚拟机server0:

1.创建目录与网页文件

# mkdir  /var/www/abc/private

# echo 小蝌蚪找妈妈  >  /var/www/abc/private/index.html

# cat  /var/www/abc/private/index.html

2.建立新的从配置文件

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

 <Directory   "/var/www/abc/private">

    Require   ip  172.25.0.11   127.0.0.1    #仅允许本机访问

 </Directory>


3 重起httpd服务


测试:  在Desktop0上访问失败,在Server0上访问可以

   elinks  -dump  server0.example.com/private 

若要desktop0也访问成功,则在新建的从配置文件里添加ip:

Require   ip  172.25.0.11  172.25.0.10 127.0.0.1     

    

-------------------------------------------------------------------------------------------

思路:客户端访问服务端资源

    1.防火墙是否限制

    2.服务本身的访问控制

    3.SELinux 是否限制



 SELinux策略保护


 1.安全上下文(标签) chcon修改对象的安全上下文(标签)

从配置文件里修改

[root@server0 ~]# chcon -R(递归) --reference=/var/www   /webroot        #参考/var/www目录为模板设为新目录/webroot


方式1:参照标准目录,重设新目录的属性

– chcon [-R] --reference=模板目录 新目录


 使用自定Web根目录   /Webroot

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

<VirtualHost *:80>

    DocumentRoot /webroot

    ServerName server0.example.com

</VirtualHost>


2.创建目录与网页文件

# mkdir /webroot

# echo wo shi webroot > /webroot/index.html


3.修改访问控制配置文件,/etc/httpd/conf.d/nsd02.conf

 <Directory "/webroot">

    Require all granted

 </Directory>

 

4.修改SELinux标签值,只允许访问目录/webroot的内容

# chcon -R --reference=/var/www /webroot


5.重起httpd服务验证

6.在Desktop0上: elinks  -dump  server0.example.com

------------------------------------------------------------------------------------------  

安全Web服务


    安全的超文本协议 https  端口为:443


PKI公钥基础设施

Public Key Infrastructure,公钥基础设施

– 公钥:主要用来加密数据

– 私钥:主要用来解密数据(与相应的公钥匹配)

– 数字证书:证明拥有者的合法性/权威性(单位名称、

有效期、公钥、颁发机构及签名、......)

– Certificate Authority,数字证书授权中心:负责证书

的申请/审核/颁发/鉴定/撤销等管理工作



HTTPS 加密Web通信(TCP 443端口)

– Secure Sockets Layer ,安全套接字层

– Transport Layer Security,安全传输层协议

实现条件

– 启用 SSL 模块支持

– 部署好加密素材:网站服务器的数字证书、网站服务

器的私钥、根证书(CA管理机构的证书)



虚拟机server0上操作:

1.安装mod_ssl软件包

[root@server0 ~]# yum -y install mod_ssl

[root@server0 ~]# ls /etc/httpd/conf.d/ssl.conf


2.部署网站的证书(营业执照)   certs(证书)

# cd /etc/pki/tls/certs/

# wget http://172.25.254.254/pub/tls/certs/server0.crt


3.部署网站的根证书(公安局信息)

# cd /etc/pki/tls/certs/

# wget http://172.25.254.254/pub/example-ca.crt


4.部署私钥(用于解密)    private(密钥)

# cd /etc/pki/tls/private/

# wget http://172.25.254.254/pub/tls/private/server0.key


5.修改配置文件/etc/httpd/conf.d/ssl.conf


<VirtualHost _default_:443>

59行:DocumentRoot "/webroot"

60行:ServerName server0.example.com:443

100行:SSLCertificateFile /etc/pki/tls/certs/server0.crt

107行:SSLCertificateKeyFile /etc/pki/tls/private/server0.key

122行:SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt


6.重起httpd服务


虚拟机desktop0上验证:

[root@desktop0 ~]# firefox https://server0.example.com       #页面显示连接不受信任,选择“我已充分了解可能的风险”确认安全例外 ,网页已加密

------------------------------------------------------------------------------------------

部署动态网站


静态网站的运行

服务端的原始网页 = 浏览器访问到的网页



动态网站的运行

服务端的原始网页 ≠ 浏览器访问到的网页

– 由Web服务软件接受请求,动态程序转后端模块处理



案例6:部署并测试WSGI站点


1.安装支持Python软件mod_wsgi

[root@server0 /]# yum -y install mod_wsgi


2.切换到相应/var/www/nsd目录下载动态页面


# cd /var/www/nsd/

# wget http://172.25.254.254/pub/materials/webinfo.wsgi

# cat webinfo.wsgi      #查看源代码


3.在Desktop0上查看,可以看到源代码

# yum -y install mod_wsgi

# firefox  webapp0.example.com/webinfo.wsgi


4.server0上修改 /etc/httpd/conf.d/nsd01.conf


   /var/www/nsd 相当于客户端的 根/


 <VirtualHost  *:80>

    DocumentRoot  /var/www/nsd

    ServerName  webapp0.example.com

    alias  /  /var/www/nsd/webinfo.wsgi       #跳转,/var/www/nsd相当于 客户端的根/,意思是可以直接输入域名就可以访问/var/www/nsd/webinfo.wsgi的内容

 </VirtualHost>


5.重起httpd服务验证

6.验证

# elinks  -dump   webapp0.example.com



7.server0上修改 /etc/httpd/conf.d/nsd01.conf


            /var/www/nsd  ==== 客户端的 /


 <VirtualHost  *:80>

    DocumentRoot  /var/www/nsd

    ServerName  webapp0.example.com

    wsgiscriptalias  /  /var/www/nsd/webinfo.wsgi

 </VirtualHost>

8.重起httpd服务验证

9.验证

# elinks  -dump   webapp0.example.com        #显示时间戳

  UNIX EPOCH time is now: 1509760256.37


  UINX时间戳:自1970-1-1  0:0:0到达当前所经过的秒数

10.修改webapp0.example.com监听端口8909

   server0上修改 /etc/httpd/conf.d/nsd01.conf


 Listen 8909         #此步一定要写!!!!!

 <VirtualHost *:8909>

     DocumentRoot /var/www/nsd

     ServerName webapp0.example.com

     wsgiscriptalias / /var/www/nsd/webinfo.wsgi

 </VirtualHost>


11. SELinux 限制非默认端口  8909


# semanage port -l  |  grep http       #查看允许的端口

# semanage port -a  -t  http_port_t  -p tcp 8909  #添加端口

# semanage port -l | grep http

# elinks -dump webapp0.example.com:8909

  拒绝连接的原因:要检查SElinux访问权限,防火墙权限和服务端的访问权限