- 往事太多了:不负韶华,以梦为马,历尽千帆,归来仍是少年
- 环境准备
- Web服务器简介
- 常见重点配置
- 常见错误
- DocumentRoot:网页文件根目录(/var/www/html)
- 针对存放网页文件的目录,访问控制规则会自动继承
- 访问出现测试页面:
- 网络路径与实际路径
- 调用配置文件的使用
- Listen:监听IP地址: 监听端口(80)
- 虚拟Web主机
- 基于端口的虚拟Web主机(端口优先级最高匹配)
- NFS服务基础
- 实现NFS共享的开机自动挂载
- 触发挂载(了解内容)
- 触发挂载进阶autofs与NFS
- 远程管理默认使用端口22
2 环境准备
所有虚拟机设置SELinux运行模式
- [root@server ~]# getenforce
- Enforcing
- [root@server ~]# setenforce 0 #当前设置
- [root@server ~]# getenforce
- Permissive
- [root@server ~]# vim /etc/selinux/config
- SELINUX=permissive
所有虚拟机设置防火墙(停止防火墙服务)
- [root@server ~]# yum -y remove firewalld
- [root@server ~]# rpm -q firewalld
3 Web服务器简介
•基于 B/S (Browser/Server)架构的网页服务
–服务端提供网页
–浏览器下载并显示网页
•Hyper Text Markup Language,超文本标记语言
•Hyper Text Transfer Protocol,超文本传输协议
三步骤策略:装包、配置、启服务
实现Web功能软件:httpd、Nginx、Tomcat
httpd由软件基金会Apache
虚拟机A:构建基本Web服务
- [root@server ~]# yum -y install httpd
- [root@server ~]# rpm -q httpd
- [root@server ~]# echo NSD Web Server > /var/www/html/index.html
- [root@server ~]# systemctl restart httpd #重启服务
- [root@server ~]# curl 192.168.88.240 #测试访问
- NSD Web Server
4 常见重点配置
Listen:监听地址:端口(80)
ServerName:本站点注册的DNS名称(空缺)
DocumentRoot:网页根目录(/var/www/html)
DirectoryIndex:起始页/首页文件名(index.html)
主配置文件:/etc/httpd/conf/httpd.conf
5 常见错误
- [root@server ~]# systemctl restart httpd
- Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
- [root@server ~]# journalctl -xe
6 DocumentRoot:网页文件根目录(/var/www/html)
虚拟机A
- [root@server ~]# mkdir /var/www/myweb
- [root@server ~]# echo wo shi myweb > /var/www/myweb/index.html
- [root@server ~]# vim /etc/httpd/conf/httpd.conf
- …….此处省略一万字
- DocumentRoot "/var/www/myweb"
- …….此处省略一万字
- [root@server ~]# systemctl restart httpd #重启服务
- [root@server ~]# curl 192.168.88.240
- wo shi myweb
7 针对存放网页文件的目录,访问控制规则会自动继承
假设访问规则如此设置:
/var/www #允许所有客户端进行访问
/var/www/abc/nsd/cbd #拒绝客户端
造成的结果:
/var/www/abc #允许所有客户端进行访问
/var/www/abc/nsd #允许所有客户端进行访问
/var/www/abc/nsd/cbd #拒绝客户端
/var/www/abc/nsd/cbd/xixi #拒绝客户端
/var/www/abc/nsd/cbd/xixi/haha #拒绝客户端
基于网页文件目录,进行访问控制
当子目录没有规则,默认继承上一级目录规则
针对此目录有单独配置,则不继承上一级目录规则
<Directory />
Require all denied #拒绝所有人访问
</Directory>
<Directory "/var/www">
Require all granted #允许所有人访问
</Directory>
总结:默认情况下网页文件,必须在/var/www目录下,才能允许访问
8 访问出现测试页面:
- 没有网页文件
- 网页文件名称不是index.html
- httpd的访问控制规则拒绝
- SELinux的没有关闭
虚拟机A:
- [root@server ~]# mkdir /webroot
- [root@server ~]# echo wo shi webroot > /webroot/index.html
- [root@server ~]# vim /etc/httpd/conf/httpd.conf
- …….此处省略一万字
- DocumentRoot "/webroot" #修改原有配置
- <Directory "/webroot"> #针对于/webroot路径
- Require all granted #允许所有人访问
- </Directory>
- …….此处省略一万字
- [root@server ~]# systemctl restart httpd #重启服务
- [root@server ~]# curl 192.168.88.240
- wo shi webroot
9 网络路径与实际路径
客户端curl 192.168.88.240---》http协议---》服务端收到http协议的请求---》内存寻找进程---》httpd进程(监听状态)---》配置文件 DocumentRoot------》/webroot-----》index.html
客户端:浏览器 http://192.168.88.240 #网络路径
服务端: /webroot/index.html #实际路径
http://192.168.88.240 = /webroot
DocumentRoot ---》/webroot
网络路径:curl 192.168.88.240/webroot/abc/
实际路径: /webroot/webroot/abc/index.html
虚拟机A
- [root@server ~]# mkdir /webroot/abc
- [root@server ~]# echo wo shi abc > /webroot/abc/index.html
- [root@server ~]# curl 192.168.88.240/abc/
10 调用配置文件的使用
•配置文件路径
–/etc/httpd/conf/httpd.conf #主配置文件
–/etc/httpd/conf.d/*.conf #调用配置文件
虚拟机A
- [root@server ~]# vim /etc/httpd/conf.d/haha.conf
- DocumentRoot /var/www/cbd
- [root@server ~]# mkdir /var/www/cbd
- [root@server ~]# echo wo shi CBD > /var/www/cbd/index.html
- [root@server ~]# systemctl restart httpd
- [root@server ~]# curl 192.168.88.240
11 Listen:监听IP地址: 监听端口(80)
端口:数字编号起到标识作用,标识协议或者进程
http协议默认端口:80
建议自定义端口时大于1024,端口的极限65535
虚拟机A
- [root@server ~]# vim /etc/httpd/conf.d/haha.conf
- DocumentRoot /var/www/cbd
- Listen 8000 #新增配置监听8000端口
- [root@server ~]# systemctl restart httpd
- [root@server ~]# curl 192.168.88.240:8000
- [root@server ~]# curl 192.168.88.240
- 格式:
- [root@server ~]# curl 192.168.88.240:8000/xixi/
12 虚拟Web主机
•虚拟Web主机
–由同一台服务器,提供多个不同的Web站点
•区分方式(构建方式)
–基于域名的虚拟主机
–基于端口的虚拟主机
–基于IP地址的虚拟主机
•为每个虚拟站点添加配置
<VirtualHost IP地址:端口>
ServerName 此站点域名,比如www.qq.com
DocumentRoot 此站点的网页根目录
</VirtualHost>
虚拟机A:
[root@server ~]# vim /etc/httpd/conf.d/xixi.conf
<VirtualHost *:80> #在所有IP地址监听80
ServerName www.qq.com #网站的域名
DocumentRoot /var/www/qq #网页文件路径
</VirtualHost>
<VirtualHost *:80>
ServerName www.lol.com
DocumentRoot /var/www/lol
</VirtualHost>
[root@server ~]# mkdir /var/www/qq /var/www/lol
[root@server ~]# echo wo shi QQ > /var/www/qq/index.html
[root@server ~]# echo wo shi LOL > /var/www/lol/index.html
[root@server ~]# systemctl restart httpd
采用/etc/hosts文件直接解析域名,只为本机解析
- [root@server ~]# vim /etc/hosts
- …….此处省略一万字
- 192.168.88.240 www.qq.com www.lol.com
- [root@server ~]# curl www.qq.com
- [root@server ~]# curl www.lol.com
一旦使用虚拟Web主机功能,所有的网站都必须使用虚拟Web方式进行呈现
虚拟机A
- [root@server ~]# vim /etc/httpd/conf.d/haha.conf
- …….此处省略一万字
- <VirtualHost *:80>
- ServerName www.xixi.com
- DocumentRoot /webroot
- </VirtualHost>
- [root@server ~]# systemctl restart httpd
- [root@server ~]# vim /etc/hosts
- …….此处省略一万字
- 192.168.88.240 www.qq.com www.lol.com www.xixi.com
- [root@server ~]# curl http://www.xixi.com
13 基于端口的虚拟Web主机(端口优先级最高匹配)
- [root@server ~]# vim /etc/httpd/conf.d/xixi.conf
- <VirtualHost *:80>
- ServerName www.qq.com
- DocumentRoot /var/www/qq
- </VirtualHost>
- Listen 8080
- <VirtualHost *:8080>
- ServerName www.qq.com
- DocumentRoot /var/www/lol
- </VirtualHost>
- [root@server ~]# systemctl restart httpd
- [root@server ~]# curl www.qq.com:8080
- [root@server ~]# curl www.qq.com
14 NFS服务基础
•Network File System,网络文件系统
–用途:为客户机提供共享使用的文件夹
–协议:NFS( 2049)、RPC( 111)
•所需软件包:nfs-utils
•系统服务:nfs-server
虚拟机A:服务端
- [root@server ~]# rpm -q nfs-utils
- nfs-utils-1.3.0-0.54.el7.x86_64
- [root@server ~]# mkdir /abc #创建共享目录
- [root@server ~]# echo haha > /abc/h.txt
- [root@server ~]# echo xixi > /abc/x.txt
- [root@server ~]# ls /abc/
- [root@server ~]# vim /etc/exports
- 文件夹路径 客户机地址(权限)
- /abc *(ro) #允许所有客户端进行只读访问
- [root@server ~]# systemctl restart nfs-server
虚拟机B:客户端
- [root@pc2 ~]# rpm -q nfs-utils
- nfs-utils-1.3.0-0.54.el7.x86_64
- [root@pc2 ~]# showmount -e 192.168.88.240 #查看对方nfs共享
- Export list for 192.168.88.240:
- /abc *
- [root@pc2 ~]# mkdir /mnt/mynfs
- [root@pc2 ~]# mount 192.168.88.240:/abc /mnt/mynfs
- [root@pc2 ~]# ls /mnt/mynfs
- [root@pc2 ~]# df -h /mnt/mynfs #查看正在挂载的设备信息
15 实现NFS共享的开机自动挂载
虚拟机B:
_netdev:声明网络设备,系统在具备网络参数后,再进行挂载本设备
- [root@pc2 ~]# vim /etc/fstab
- ……此处省略一万字
- 192.168.88.240:/abc /mnt/mynfs nfs _netdev 0 0
- [root@pc2 ~]# umount /mnt/mynfs
- [root@pc2 ~]# ls /mnt/mynfs
- [root@pc2 ~]# mount -a
- [root@pc2 ~]# ls /mnt/mynfs
16 触发挂载(了解内容)
•由 autofs 服务提供的“按需访问”机制
–只要访问挂载点就会触发响应,自动挂载指定设备
–闲置一段时间后,会自动卸载
- 虚拟机B:
- [root@pc2 ~]# yum -y install autofs
- [root@pc2 ~]# systemctl restart autofs
- [root@pc2 ~]# ls /misc
- [root@pc2 ~]# ls /misc/cd
触发挂载实现
•主配置文件 /etc/auto.master
–监控点目录 挂载配置文件的路径
•挂载配置文件,比如 /etc/auto.misc
–触发点子目录 -挂载参数 :设备名
案例:虚拟机B访问/myauto/nsd,光驱设备挂载/ myauto/nsd
- [root@pc2 ~]# yum -y install autofs
- [root@pc2 ~]# vim /etc/auto.master
- ……此处省略一万字
- /myauto /opt/xixi.txt
- ……此处省略一万字
- [root@pc2 ~]# vim /opt/xixi.txt
- nsd -fstype=iso9660 :/dev/cdrom
- [root@pc2 ~]# systemctl restart autofs
- [root@pc2 ~]# ls /myauto/
- [root@pc2 ~]# ls /myauto/nsd
17 触发挂载进阶autofs与NFS
虚拟机B访问/myauto/test,虚拟机A 的nfs共享/abc挂载到/myauto/test
- [root@pc2 ~]# yum -y install autofs
- [root@pc2 ~]# vim /etc/auto.master
- ……此处省略一万字
- /myauto /opt/xixi.txt
- ……此处省略一万字
- [root@pc2 ~]# vim /opt/xixi.txt
- nsd -fstype=iso9660 :/dev/cdrom
- test -fstype=nfs 192.168.88.240:/abc
- [root@pc2 ~]# systemctl restart autofs
- [root@pc2 ~]# ls /myauto/test
18 远程管理默认使用端口22
ssh协议默认端口为22
虚拟机B:修改sshd服务监听的端口
- [root@pc2 ~]# vim /etc/ssh/sshd_config
- Port 2244 #开头的#号去掉
- [root@pc2 ~]# systemctl restart sshd #重启服务
虚拟机A:指定端口进行远程管理
- [root@server ~]# ssh -p 2244 root@192.168.88.2
19 课后基础练习:
案例1:为虚拟机A 配置以下虚拟Web主机
- 实现三个网站的部署
- 实现客户端访问server0.example.com网页内容为 大圣归来
- 实现客户端访问www0.example.com网页内容为 大圣又归来
- 实现客户端访问webapp0.example.com网页内容为 大圣累了
案例2:为虚拟机A 使用自定Web根目录
调整 Web 站点 http://www0.example.com 的网页目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录(提示:修改Web服务的访问控制)
2)确保站点 http://www0.example.com 仍然可访问
案例3:为虚拟机A 部署站点
为站点 webapp0.example.com 进行配置,要求如下:
1)此虚拟主机侦听在端口8909
2)从浏览器访问 http://webapp0.example.com:8909
案例4:普通NFS共享的实现
1.在虚拟机A上配置NFS服务,只读的方式共享目录 /public
2.在虚拟机B上访问NFS共享目录
a)将虚拟机A 的 /public 挂到本地 /mnt/nfsmount
b)这些文件系统在系统启动时自动挂载
案例5: autofs触发挂载
在虚拟机B上访问NFS共享目录,将 虚拟机A 的 /public完成触发挂载到本地 /mnt/nfsauto
参考答案
案例1:为虚拟机A 配置以下虚拟Web主机
- 实现三个网站的部署
- 实现客户端访问server0.example.com网页内容为 大圣归来
- 实现客户端访问www0.example.com网页内容为 大圣又归来
- 实现客户端访问webapp0.example.com网页内容为 大圣累了
- 虚拟机A:
- [root@A ~]# systemctl stop firewalld
- [root@A ~]# setenforce 0
- [root@A ~]# yum -y install httpd
- [root@A ~]# mkdir /var/www/nsd01
- [root@A ~]# mkdir /var/www/nsd02
- [root@A ~]# mkdir /var/www/nsd03
- [root@A ~]# echo '大圣归来' > /var/www/nsd01/index.html
- [root@A ~]# echo '大圣又归来' > /var/www/nsd02/index.html
- [root@A ~]# echo '大圣累了' > /var/www/nsd03/index.html
- [root@A ~]# vim /etc/httpd/conf.d/vhost.conf
- <VirtualHost *:80>
- ServerName server0.example.com
- DocumentRoot /var/www/nsd01
- </VirtualHost>
- <VirtualHost *:80>
- ServerName www0.example.com
- DocumentRoot /var/www/nsd02
- </VirtualHost>
- <VirtualHost *:80>
- ServerName webapp0.example.com
- DocumentRoot /var/www/nsd03
- </VirtualHost>
- [root@A ~]# systemctl restart httpd
- 虚拟机B:测试
- [root@B ~]# vim /etc/hosts
- 192.168.88.240 server0.example.com www0.example.com webapp0.example.com
- [root@B ~]# curl server0.example.com
- [root@B ~]# curl www0.example.com
- [root@B ~]# curl webapp0.example.com
案例2:为虚拟机A 使用自定Web根目录
调整 Web 站点 http://www0.example.com 的网页目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录
2)确保站点 http://www0.example.com 仍然可访问
- 虚拟机A:
- [root@A ~]# vim /etc/httpd/conf.d/vhost.conf
- <VirtualHost *:80>
- ServerName server0.example.com
- DocumentRoot /var/www/nsd01
- </VirtualHost>
- <VirtualHost *:80>
- ServerName www0.example.com
- DocumentRoot /webroot
- </VirtualHost>
- <VirtualHost *:80>
- ServerName webapp0.example.com
- DocumentRoot /var/www/nsd03
- </VirtualHost>
- [root@A ~]# mkdir /webroot
- [root@A ~]# echo 'wo shi webroot' > /webroot/index.html
- [root@A ~]# vim /etc/httpd/conf.d/myacl.conf
- <Directory /webroot>
- Require all granted
- </Directory>
- [root@A ~]# systemctl restart httpd
- 虚拟机B:
- [root@B ~]# curl www0.example.com
- wo shi webroot
- [root@B ~]#
案例3:为虚拟机A 部署站点
为站点 webapp0.example.com 进行配置,要求如下:
1)此虚拟主机侦听在端口8909
2)从浏览器访问 http://webapp0.example.com:8909
- 虚拟机A:
- [root@A ~]# vim /etc/httpd/conf.d/vhost.conf
- <VirtualHost *:80>
- ServerName server0.example.com
- DocumentRoot /var/www/nsd01
- </VirtualHost>
- <VirtualHost *:80>
- ServerName www0.example.com
- DocumentRoot /webroot
- </VirtualHost>
- Listen 8909
- <VirtualHost *:8909>
- ServerName webapp0.example.com
- DocumentRoot /var/www/nsd03
- </VirtualHost>
- [root@A ~]# systemctl restart httpd
- 虚拟机B:
- [root@B ~]# curl webapp0.example.com:8909
- 大圣累了
案例4:普通NFS共享的实现
1.在虚拟机A上配置NFS服务,只读的方式共享目录 /public
2.在虚拟机B上访问NFS共享目录
a)将虚拟机A 的 /public 挂到本地 /mnt/nfsmount
b)这些文件系统在系统启动时自动挂载
- 虚拟机A:
- [root@A ~]# yum -y install nfs-utils
- [root@A ~]# mkdir /public
- [root@A ~]# touch /public/1.txt
- [root@A ~]# ls /public/
- [root@A ~]# vim /etc/exports
- /public *(ro)
- [root@A ~]# systemctl restart nfs-server
- 虚拟机B:
- [root@B ~]# mkdir /mnt/nfsmount
- [root@B ~]# vim /etc/fstab
- 192.168.88.240:/public /mnt/nfsmount nfs _netdev 0 0
- [root@B ~]# mount -a
- [root@B ~]# df -h /mnt/nfsmount
- 192.168.88.240:/public 17G 3.5G 14G 21% /mnt/nfsmount
- [root@B ~]#
案例5: autofs触发挂载
在虚拟机B上访问NFS共享目录,将 虚拟机A 的 /public完成触发挂载到本地 /mnt/nfsauto
- [root@pc2 ~]# yum -y install autofs
- [root@pc2 ~]# vim /etc/auto.master
- ……此处省略一万字
- /mnt /etc/nsd.conf
- ……此处省略一万字
- [root@pc2 ~]# vim /etc/nsd.conf
- nfsauto -fstype=nfs 192.168.88.240:/public
- [root@pc2 ~]# systemctl restart autofs
- [root@pc2 ~]# ls /mnt/nfsauto