搭建基本的Web服务
• 基于 B/S (Browser/Server)架构的网页服务
– 服务端提供网页
– 浏览器下载并显示网页
• Hyper Text Markup Language,超文本标记语言
• Hyper Text Transfer Protocol,超文本传输协议
装包、起服务
服务端:Server
- 安装软件httpd
- 启动httpd服务,设置开机自起
默认网页文件的位置:/var/www/html/index.html -
书写一个页面文件
echo '<h1>My First Web' > /var/www/html/index.html
客户端:Desktop
#前提:真机所有浏览器关闭
1.测试访问:firefox 172.25.0.11
2.测试访问:命令行测试工具
[root@desktop0 ~]# elinks -dump 172.25.0.11
#########################################################
设置Web的域名
DNS服务器:classroom.example.com
server0.example.com
www0.example.com
webapp0.example.com
虚拟机Server0:
1.修改配置文件/etc/httpd/conf/httpd.conf
#补充vim 命令模式 /ServerName 全文查找ServerName 按n、N跳转
#将开头的‘#’去掉
ServerName server0.example.com:80
2.重起httpd服务
虚拟机desktop0:
测试:elinks -dump server0.example.com
#################################################
DocumentRoot:网页根目录(/var/www/html)
虚拟机Server0:
1.修改配置文件/etc/httpd/conf/httpd.conf
#补充vim 命令模式 /Doc 全文查找Doc 按n、N跳转
DocumentRoot "/var/www/myweb"
2.创建目录/var/www/myweb,重起httpd服务
3.书写新的测试页面
[root@server0 ~]# echo woshi myweb > /var/www/myweb/index.html
虚拟机desktop0:
测试:elinks -dump server0.example.com
#######################################################
服务端与客户端路径的对照:
客户端: elinks -dump server0.example.com
服务端: /var/www/myweb
客户端: elinks -dump server0.example.com/abc
服务端: /var/www/myweb/abc
客户端: server0.example.com/abc/private
服务端: /var/www/myweb/abc/private
######################################################
虚拟Web主机
一台服务器,提供多个不同的Web站点
• 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机
#######################################################
基于域名的虚拟主机
一旦启用 虚拟Web主机功能,所有的站点都必须用虚拟Web主机来实现
/etc/httpd/conf.d/*.conf
容器
• 为每个虚拟站点添加配置
<VirtualHost IP地址:端口>
ServerName 此站点的DNS名称
DocumentRoot 此站点的网页根目录
</VirtualHost>
#帮助文档 /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
虚拟机Server0:
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf #调用配置
<VirtualHost :80> #虚拟Web主机开始
DocumentRoot /var/www/qq #指定网页文件根目录
ServerName www0.example.com #指定域名
</VirtualHost> #虚拟Web主机结束
<VirtualHost :80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/myweb
ServerName server0.example.com
</VirtualHost>
[root@server0 ~]# mkdir /var/www/qq #建立相应的网页目录
[root@server0 ~]# mkdir /var/www/baidu #建立相应的网页目录
[root@server0 ~]# echo QQ > /var/www/qq/index.html
[root@server0 ~]# echo baidu > /var/www/baidu/index.html
[root@server0 ~]# systemctl restart httpd
#########################################################
实现httpd访问控制,实现仅本机访问页面
• 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的ACL访问权限
– 除非针对子目录有明确设置
<Directory 目录的绝对路径>
.. ..
Require all denied|granted
Require ip IP或网段地址 .. ..
</Directory>
虚拟机Server:
1.建立目录
mkdir /var/www/myweb/private
2.写入网页文件
echo woshi private > /var/www/myweb/private/index.html
测试:
虚拟机Server: elinks -dump server0.example.com/private
虚拟机Desktop: elinks -dump server0.example.com/private
3.实现httpd服务访问控制
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/var/www/myweb/private">
Require ip 127.0.0.1 172.25.0.11
</Directory>
4.重起httpd服务
测试:
虚拟机Server: elinks -dump server0.example.com/private #可以
虚拟机Desktop: elinks -dump server0.example.com/private #失败
########################################################
SELinux 安全上下文(标签)
• 方式1:参照标准目录,重设新目录的属性
– chcon [-R] --reference=模板目录 新目录
案例4:使用自定Web根目录
调整 Web 站点 http://server0.example.com 的网页
目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录
[root@server0 ~]# mkdir /webroot
[root@server0 ~]# echo woshi webroot > /webroot/index.html
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /webroot
ServerName server0.example.com
</VirtualHost>
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/webroot">
Require all granted
</Directory>
[root@server0 ~]# ls -Zd /var/www
[root@server0 ~]# ls -Zd /webroot
[root@server0 ~]# chcon -R --reference=/var/www /webroot/
[root@server0 ~]# ls -Zd /webroot
[root@server0 ~]# systemctl restart httpd
###################################################
cp会继承标签值,mv不会继承: 尽量用cp
###################################################
部署动态Web站点
1.在虚拟机Server上,下载动态页面(Python页面)
wget http://classroom/pub/materials/webinfo.wsgi
cat webinfo.wsgi
2.在虚拟机Server上,放入webapp0.example.com默认网页根目录
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
[root@server0 ~]# cp webinfo.wsgi /var/www/baidu/
[root@server0 ~]# ls /var/www/baidu/
3.安装Python程序,解析识别 Python页面
[root@server0 ~]# yum -y install mod_wsgi
4.Desktop测试:
elinks -dump webapp0.example.com/webinfo.wsgi
# 可以看到Python代码
5.方便访问,让客户端访问webapp0.example.com可以直接看到 Python页面
虚拟机Server0上:网页跳转(网页别名)
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
alias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
[root@server0 ~]# systemctl restart httpd
-
客户端测试访问
[root@desktop0 ~]# elinks -dump webapp0.example.com -
程序 Python 的翻译
虚拟机Server0上:
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
<VirtualHost *:80>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
wsgiscriptalias / /var/www/baidu/webinfo.wsgi</VirtualHost>
[root@server0 ~]# systemctl restart httpd - 客户端测试访问
[root@desktop0 ~]# elinks -dump webapp0.example.com
9.此webapp0.example.com侦听在端口8909
虚拟机Server0上:
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf
Listen 8909
<VirtualHost *:8909>
DocumentRoot /var/www/baidu
ServerName webapp0.example.com
WsgiScriptAlias / /var/www/baidu/webinfo.wsgi
</VirtualHost>
[root@server0 ~]#
显示SELinux开放的所有接口
[root@server0 ~]# semanage port -l
[root@server0 ~]# semanage port -l | grep http
[root@server0 ~]# semanage port -a -t http_port_t -p tcp 8909
-a :添加
-t:类型
-p:协议
[root@server0 ~]# systemctl restart httpd
[root@desktop0 ~]# elinks -dump webapp0.example.com:8909
########################################################
########################################################
#######################################################
####################################################
本文转自sweak_h 51CTO博客,原文链接:http://blog.51cto.com/13478354/2051463,如需转载请自行联系原作者