HTTP服务基础
环境准备:1还原虚拟机classroom server desktop# rht-vmctl reset classroom | server | desktop2.设置server与desktop防火墙默认区域为trusted# firewall-cmd --set-default-zone=trusted C/S架构 -- 客户端/服务端架构 B/S架构 -...
环境准备: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)架构的网页服务:服务端提供网页;浏览器下载并显示网页;
HTML:Hyper Text Markup Language:超文本标记语言
HTTP:Hyper 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/
##############################################################################
更多推荐
所有评论(0)