环境准备:1还原虚拟机classroom server desktop

# rht-vmctl reset classroom | server | desktop

2.设置server与desktop防火墙默认区域为trusted

# firewall-cmd --set-default-zone=trusted 

C/S架构 -- 客户端/服务端架构           B/S架构 -- 浏览器/服务器架构

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

HTTP服务基础    

独立web主机

Web通信基本概念

基于B/S(Browser/Server)架构的网页服务:服务端提供网页;浏览器下载并显示网页;

    HTMLHyper Text Markup Language:超文本标记语言

HTTPHyper Text Transfer Protocol:超文本传输协议

                       ——HTTP请求——>

elinks、firefox、IE……                   httpd、nginx、tomcat……

                       <——HTTP应答——

   Elinks浏览器可以在命令行模式显示出网页文本,经常用来测试网站的可用性。

   Firefox浏览器支持更多网页特性,是访问复杂网页、网址的优秀工具。

 网站访问常见问题 ——

报错:ELinks: 没有到主机的路由   原因:对方的防火墙阻止访问

报错:ELinks: 拒绝连接           原因:对方的服务没开启

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

RHEL7中的web服务

Web网站服务端:软件包httpd

Web网站浏览器:软件包elinks或fireox

     网页文件默认存放路径:/var/www/html/

     网页主页文件默认的名称:index.html

Web网站服务端提供的默认配置

-Listen:监听地址:传输协议及端口:TCP 80

-ServerName:本站点注册的DNS名称(默认空缺

-DocumentRoot:网页根目录(httpd网站文档的默认根目录:/var/www/html

-DirectoryIndex:起始页/首页文件名(默认首页文件:index.html

配置文件: /etc/httpd/conf/httpd.conf  —— 全局设置

           /etc/httpd/conf.d/*.conf    —— 自定义设置

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

搭建基本的Web服务 

服务端server0:具备能够提供功能或者资源的程序(Apache(httpd)、Nginx、Tomcat)

1.安装服务端软件httpd——可以提供页面    # yum -y install httpd

2.书写网页     # echo “<marquee><font  color=green><h1>My  First  Web!!” > /var/www/html/index.html

3.修改配置文件 # vim /etc/httpd/conf/httpd.conf

               95行 ServerName server0.example.com:80   //把注释去掉

4.重起服务     # systemctl restart httpd

               # systemctl enabled httpd   #设为开机自起

               # systemctl status   httpd

客户端:虚拟机desktop0,安装客户端软件firefox(自己访问自己)

#firefox http://172.25.0.11

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

修改网页文件默认根路径

服务端:虚拟机server0

1.安装httpd    # yum -y install httpd

2.书写网页     # mkdir /var/www/nsd1707

               # echo '<h1> My Second Web!' > /var/www/nsd1707/index.html

               # cat /var/www/nsd1707/index.html

                 <h1> My Second Web!

3.修改配置文件 # vim /etc/httpd/conf/httpd.conf

               119行 DocumentRoot "/var/www/nsd1707"   //指定网页文件的路径

4.重起服务     # systemctl restart httpd

               # systemctl enabled httpd   #设为开机自起

客户端:虚拟机desktop0

1.安装elinks   # yum -y install httpd

2.利用elinks进行访问   # elinks -dump server0.example.com

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

访问Web站点

为浏览器程序提供URL网址(Uniform Resource Locator,统一资源定位器)

客户端访问服务端资源,在浏览器中输入网址

网址的基本组成:协议名://服务器地址[:端口号]/目录/文件名

http://服务器地址[:端口号]/目录/文件名

对于需要验证的FTP资源,还需要指定用户名密码信息:

ftp://用户名:密码@服务器地址[:端口号]/目录/文件名

http://172.25.0.11----------------> /var/www/nsd1707/index.html

http://172.25.0.11/test-----------> /var/www/nsd1707/test/index.html

# mkdir /var/www/nsd1707/test

# echo '<h1> TEST01' > /var/www/nsd1707/test/index.html

# cat /var/www/nsd1707/test/index.html

<h1> TEST01

# elinks -dump server0.example.com      //My Second Web!

# elinks -dump 172.25.0.11/test         //TEST01

###############################################################################案例1:独立Web站点的快速部署

为 http://server0.example.com 配置Web站点,要求如下:

 从http://classroom/pub/materials/station.html下载一个主页文件,将其重命名为 index.html

 将此文件拷贝到站点的 DocumentRoot 目录下,不要对文件 index.html 的内容作任何修改

    使用 elinks 或firefox 浏览上述Web站点

步骤一:构建及部署网站服务器

1)安装软件包httpd     # yum  -y  install  httpd

2)部署网页 # cd  /var/www/html/                       //进入网页目录

# wget http://classroom/pub/materials/station.html -O index.html   //下载网页

# cat  index.html                      //检查网页文件: Default Site.

3)启动系统服务httpd,并设置开机自启    # systemctl  restart  httpd

                                         # systemctl  enable  httpd

步骤二:访问网站服务器

1)安装elinks,使用elinks浏览器查看  # yum  -y  install  elinks      

   # elinks  -dump  http://server0.example.com/    //访问指定网址:Default Site.

2)使用firefox浏览器查看  # firefox http://server0.examle.com/”。

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

虚拟主机的含义及类型

虚拟Web主机:由同一台服务器提供多个不同的web站点    (省钱!!!)

虚拟主机区分方式

1)基于域名的虚拟主机——不同的域名对应同一个IP,得到不同的网站    (必须掌握)

2)基于端口的虚拟主机——(测试环境)同一个域名/IP的不同端口对应不同的网站

3)基于ip地址的虚拟主机——(基本不用)一个IP对应一个域名

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

配置一个虚拟站点: 配置文件路径:/etc/httpd/conf/httpd.conf

                                 /etc/httpd/conf.d/*.conf  

注意事项:为每个站点提前准备好网页目录。

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

独立Web服务器与虚拟web主机的特点

独立Web主机的特点 —— 服务器多个域名 ---> 相同的网页内容

http://server0.example.com/       ===> 网页1

http://www0.example.com/          ===> 网页1

http://webapp0.example.com/       ===> 网页1

          配置文件:/etc/httpd/conf/httpd.conf

          网页目录定义:DocumentRoot /var/www/htm

虚拟Web主机的特点——在同一套httpd平台上跑很多个网站(多个域名--->不同的网页内容)

http://server0.example.com/       ===> 网页1

http://www0.example.com/          ===> 网页2

http://webapp0.example.com/       ===> 网页3

http://webapp0.example.com:8909/  ===> 网页4

     网页目录由<VirtualHost ...>区段配置定义

     多个虚拟主机站点的典型设置(/etc/httpd/conf.d/*.conf):

为每个虚拟站点添加配置

<VirtualHost    ip地址:端口>

        ServerName  此站点的DNS名称

        DocumenRoot此站点的网页目录的路径

</VirtualHost>

对默认Web站点的影响

一旦启用了虚拟web主机以后,外部的DocumenRoot,ServerName会被忽略 ,第一个虚拟站点被视为默认站点,若客户机请求的URL不属于任何已知站点,则由第一个站点响应,为消除虚拟web对默认站点的影响新增配置文件/etc/httpd/conf.d/00-default.conf

httpd.conf默认配置:

/根目录   ===》 Require  all  denied

/var/www目录   ===》 Require  all  granted

其他目录  ===》继承对/根目录的授权限制

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

Apache帮助信息的文档:/usr/share/doc/

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

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

案例2:虚拟Web主机的部署

为server0扩展Web站点,新建虚拟主机 http://www0.example.com,具体要求如下:

设置 DocumentRoot 为 /var/www/virtual

从 http://classroom/pub/materials/www.html 下载主页文件,并重命名为 index.html

不要对文件 index.html 的内容作任何修改,将其放到此虚拟主机的 DocumentRoot 目录下

确保 fleyd 用户能在 /var/www/virtual 目录建文件

确保站点 http://server0.example.com 仍然可用

效果:www0.example.com--->/var/www/virtual  server0.example.com--->/var/www/virtual

步骤一:创建新的网页文件根路径   # mkdir  /var/www/virtual

步骤二:部署网页文档  

1)确保fleyd用户(网站管理员)能在 /var/www/virtual 目录建文件

# useradd fleyd

# ls -ld /var/www/html/

# setfacl  -m  u:fleyd:rwx  /var/www/virtual/

# getfacl /var/www/html/

# su - fleyd

# touch /var/www/html/1.txt

# exit

2)部署网页文件 # cd  /var/www/virtual/

wget  http://classroom/pub/materials/www.html  -O  index.html

或自己书写网页 # echo '<h1> My name is nsd1707' > /var/www/virtual/index.html

步骤三:为新站点创建独立的配置文件

[root@server0 virtual]vim  /etc/httpd/conf.d/01-www0.conf

<VirtualHost  *:80>                            //允许所有ip地址访问80端口

        ServerName  www0.example.com            //指定站点名

        DocumentRoot  /var/www/virtual          //指定站点网页根目录

</VirtualHost>

[root@server0 virtual]# httpd  -t                 //确保语法检查OK: Syntax OK

步骤四:重启系统服务httpd   # systemctl  restart  httpd

步骤五:测试。访问虚拟主机 http://www0.example.com/

访问此虚拟站点,可以看到预期的网页内容:# elinks -dump http://www0.example.com/

步骤六:完善原始站点 http://server0.example.com/

需要注意的是,原始的独立站点可能出现异常,访问时并不是原始的网页:

                     # elinks  -dump  http://server0.example.com/

原因是一旦启用虚拟站点机制以后:外部的 DocumentRoot、ServerName 会被忽略

第1个虚拟站点被视为默认站点,若客户机请求的URL不属于任何已知站点,则由第1个站点响应。   若要解决此异常,需要将原始站点转换为第一个虚拟主机,启用顺序的设置可以通过文件名开头的数字来实现。

1)为原始站点建立虚拟主机配置,确保原始默认站点仍然可用

# vim/etc/httpd/conf.d/00-default.conf  

<VirtualHost  *:80>                     //允许所有ip地址访问80端口

        ServerName  server0.example.com    //指定站点名

        DocumentRoot  /var/www/html        //指定站点网页目录

</VirtualHost>

2)重启系统服务httpd  # systemctl  restart  httpd

3)访问两个虚拟站点,确保各自的网页内容正确

[root@desktop0 ~]# elinks  -dump  http://server0.example.com/

[root@desktop0 ~]# elinks  -dump  http://www0.example.com/

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

网页内容的访问

配置目录访问

文件夹权限 

针对DocumentRoot网页目录的权限控制

httpd运行身份(用户/组):apache,能提取哪些网页资源

客户机地址限制

Ø 配置Web内容的访问控制需要使用<Directory>配置区段

Ø每个文件夹自动继承其父目录的ACL访问权限

Ø除非针对目录有明确设置

<Directory 目录的绝对路径>   

Require all granted | Require all denied |  Require ip地址或网段地址

</Directory>

Ø 禁止任何客户机访问

<Directory />                       //<Directory  "父目录路径">

Require all denied                   //上层目录拒绝任何访问

</Directory>

Ø 允许任何客户机访问       

<Directory “/var/www/html”>         //<Directory  "子目录1路径">

Require all granted                    //子目录1允许任何访问

</Directory>

Ø 仅允许部分客户机访问

<Directory “/var/www/html/private”>      //<Directory  "子目录2路径">

Require ip 172.0.0.1 ::1 172.25.0.11     //子目录2允许少数客户机

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

 案例3:配置网页内容访问

在 Web 网站 http://server0.example.com 的 DocumentRoot 目录下创建一个名为 private 的子目录,要求如下:

从 http://classroom/pub/materials/private.html 下载一个文件副本到这个目录,重命名为 index.html            不要对文件 index.html 的内容作任何修改

从server0上,任何人都可以浏览private的内容,但是从其他系统不能访问这个目录的内容

步骤一:部署网页子目录及文档

1)建立子目录  # mkdir  /var/www/html/private

2)部署网页    # cd /var/www/html/private

# wget  http://classroom/pub/materials/private.html -O index.html   //部署网页

# cat  index.html                     //检查网页文件:Private Site.

步骤二:为指定的网页子目录限制访问

在httpd服务的标准配置中,根目录 / 默认拒绝任何访问,但网页目录/var/www/默认允许任何访问。因此,只需要为个别子目录增加访问控制即可。

1)调整虚拟站点server0.example.com的配置文件

[root@server0 ~]# vim  /etc/httpd/conf.d/00-default.conf 

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

        Require  ip  127.0.0.1  ::1  172.25.0.11        //仅允许哪些客户机

</Directory>

2)重启系统服务httpd    # systemctl  restart  httpd

步骤三:测试目录访问限制

1)从desktop0上访问http://server0.example.com/private/被拒绝

# elinks -dump http://server0.example.com/private/    //回报: Forbidden

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

2)从desktop0上访问http://server0.example.com/仍然是正常的

# elinks  -dump  http://server0.example.com/         //回报:Default Site.

3)从server0本机上访问http://server0.example.com/private/也不受限制

# elinks  -dump  http://server0.example.com/private/  //回报:Private Site.

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

SELinux策略保护

标准web目录

Ø 使用semanage工具查看#semanage fcontext -l | grep httpd_sys_content

Ø 将新建的目录指定为标准web目录(自定义web目录):

     1)新建目录     2)初始化目录:restorecon -R  /目录

    标配Web端口查看:# semanage  port  -l  |  grep  ^http_port

当尝试监听非标配端口时,selinux会阻止,导致httpd服务启动失败。可查看/var/log/messages文件中会有记录。

在SELinux处于Enforcing模式时,若要开放非80、81等常规Web端口,需要调整SELinux保护策略。  

允许开放其他web端口,使用semanage工具调整,向现有的服务端口范围中增加新端口,此操作需要足够内存/交换空间支持。

# semanage  port  -a  -t PORT_TYPE  -p  协议  端口号

其中 PORT_TYPE 是以下之一:http_cache_port_t, http_port_t, jboss_manageme

WSGIScriptAlias  URL别名   实际访问的文件路径

增加新的Web目录

在SELinux强制启用模式下,增加新的合规网页目录的方法

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

chcon -R --reference=模板目录  新目录

方法2:将新目录增加到预设的标准web目录范围:

semange fcontext -a -t httpd_sys_content_t ‘新目录(/.*)?’

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

 总结思路

1.新建目录,作为新站点的根网页目录

2.书写网页,或下载网页

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

4.设置httpd服务访问控制,配置文件/etc/httpd/conf.d/nsd02.conf

5.设置SELiunx安全上下文

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

# ls  -Zd  /webroot/index.html

6.重起服务 # systemctl  restart  httpd

7.测试# elinks  -dump  http://……

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

客户端访问服务端服务(排错思路):

1.服务的访问控制

资源文档自身的权限(rwx、ACL)必须允许(rwxr-xr-x)

2.本地权限的设置

XX服务的配置的权限必须允许(<Directory 目录路径>。。。。)

3.防火墙

防火墙策略也必须允许客户机访问(trusted)

4.SELinux策略

 SELinux安全机制必须允许(chcon)   

     mv移动会影响安全上下文

     cp不会影响安全上下文     //建议多使用cp,少使用mv

SELinux对Web目录的限制/保护:

默认只允许在 /var/www/*、/src/www/*/ 少数几个目录提供网页

服务端口:80、81、443、8080 等少数几个

SELinux对Web服务器的限制

如何使用非标准的网页目录 :

1)调整httpd服务配置,添加Directory。。。允许

2)调整目录SELinux属性(chcon  -R  --reference=模板目录  自定义目录)

chcon  --reference=/var/www   自定义的Web目录

chcon  -t  httpd_sys_content_t   自定义的Web目

如何使用非标准的Web端口

semanage  port -a  -t http_port_t  -p tcp  端口号

排除SELinux问题 # 【看日志/var/log/messages,或者 sealert】

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

SELinux对与httpd服务影响

1.安全上下文(标识、标签)

查看文档的SELinux  安全上下文(标记) ——

ls  -Zd   /var/www/   /webroot

[root@server0 ~]# ls -Zd /webroot

drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /webroot

[root@server0 ~]# ls -Zd /var/www

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www

2.布尔值(功能开关)

3.非标准端口的开放

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

[root@server0 ~]# id apache

uid=48(apache) gid=48(apache) 组=48(apache)

[root@server0 ~]# rpm -q httpd

httpd-2.4.6-17.el7.x86_64

[root@server0 ~]# grep apache /etc/passwd

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

httpd服务进程的运行身份:apache用户、apache组

apache用户 对 指定的网页目录 应该由 r、x权限

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

案例4:使用自定义Web根目录

调整 Web 站点 http://server0.example.com 的网页目录,要求如下:

新建目录 /webroot,作为此站点新的网页目录

从 http://classroom/pub/materials/station.html 下载一个文件副本到这个目录,重命名为 index.html                         不要对文件 index.html 的内容作任何修改

确保站点 http://server0.example.com 仍然可访问

步骤一:部署网页目录及文档

1)建立网页目录 # mkdir  /webroot

2)部署网页文件 # cd  /webroot/

 # wget  http://classroom/pub/materials/station.html  -O  index.html

 # cat  index.html                  //检查网页文件

步骤二:调整虚拟站点http://server0.example.com/的配置

1)修改配置文件 # vim  /etc/httpd/conf.d/00-default.conf

<VirtualHost  *:80>

        ServerName  server0.example.com

        DocumentRoot  /webroot

</VirtualHost>

2)重启系统服务httpd  # systemctl  restart  httpd

步骤三:确保虚拟站点http://server0.example.com/仍然可以访问

1)未调整网页目录SELinux上下文件的情况

为虚拟站点http://server0.example.com/更换了新的网页目录以后,从浏览器访问将会失败,只能看到红帽测试页。 # elinks  -dump  http://server0.example.com/

                               Red Hat Enterprise Linux Test Page

针对此问题,可以参考目录/var/www的属性为网页目录/webroot设置SELinux安全上下文

[root@server0 ~]# chcon  -R  --reference=/var/www  /webroot/

[root@server0 ~]# ls  -Zd  /webroot/index.html                  //确认结果

-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /webroot/index.html

2)未配置目录内容访问的情况

尽管已经调整过/webroot的SELinux安全上下文,但是从浏览器访问此虚拟站点时仍然会被拒绝,还是只能看到红帽测试页。

还需要修改对应的配置文件,添加内容访问控制:

[root@server0 ~]# vim  /etc/httpd/conf.d/00-default.conf 

<VirtualHost  *:80>

        ServerName  server0.example.com

        DocumentRoot  /webroot

</VirtualHost>

<Directory  "/webroot">

        Require  all  granted

</Directory>

<Directory  "/webroot/private">

        Require  ip  127.0.0.1  ::1  172.25.0.11

</Directory>

[root@server0 ~]# systemctl  restart  httpd             //重启httpd服务

若要保持原有private子目录,建议也拷贝过来:

[root@server0 ~]# cp  -rf  /var/www/html/private/  /webroot/

3)最终访问测试

从浏览器能成功访问调整后的虚拟站点http://server0.example.com/。

[root@desktop0 ~]# elinks  -dump  http://server0.example.com/

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐