Web通信基本概念
基于 B/S (Browser/Server)架构的网页服务
服务端提供网页
浏览器下载并显示网页
Hyper Text Markup Language(html),超文本标记语言
Hyper Text Transfer Protocol(http),超文本传输协议 默认端口80
RHEL7中的Web服务
软件包:httpd
系统服务:httpd
配置文件:/ect/httpd/conf/htttpd.conf(系统自身的主配置文件)
/ect/httpd/conf.d/*.conf(用户自己特殊配置的文件)
提供的默认配置
Listen:监听地址:端口(80)
ServerName:本站点注册的DNS名称(空缺)
DocumentRoot:网页根目录(/var/www/html)
DirectoryIndex:起始页/首页文件名(index.html)
服务端启动 httpd
1.安装软件 httpd
2.启动httpd服务
systemctl restart httpd
systemctl enable httpd
ServerName:本站点注册的DNS名称(一般这里写注册得到的域名)
DNS服务器:域名解析服务:将域名解析为IP地址
服务端:
1.修改主配置文件/etc/httpd/conf/httpd.conf
95行 ServerName server0.example.com:80 #将开头的#去掉
(末行模式下:set nu 显示行号)
2.重起httpd服务
systemctl restart httpd
DocumentRoot:网页文件根目录(/var/www/html)
服务端:
1.修改主配置文件
vim /etc/httpd/conf/httpd.conf
119行 DocumentRoot "[想修改的目标地址]" #修改存放网页文件路径
2.重起httpd服务
systemctl restart httpd
网络路径与实际路径区别
客户端: firefox http://server0.example.com
服务端: httpd-->/etc/httpd/conf/httpd.conf-->DocumentRoot--->文件中写的地址
那么客户端输入的 根/ 也就相当于服务端DocumentRoot后写的地址
虚拟Web主机
由同一台服务器提供多个不同的Web站点
构建/区分方式
基于域名的虚拟主机
基于端口的虚拟主机
基于IP地址的虚拟主机
基于域名的虚拟主机
为每个虚拟站点添加配置,容器式配置格式
ServerName 此站点的DNS名称
DocumentRoot 此站点的网页根目录
配置文件一般不写在系统的主配置文件,一般自己在conf.d下创建一个"[随意取名].conf"文件进行配置
配置虚拟Web主机
服务段:
1.修改配置文件
vim /etc/httpd/conf.d/nsd01.conf
ServerName [域名]
DocumentRoot [网页的根地址]
2.重启服务
systemctl restart httpd
可能出现重启后还没用,原因可能是httpd后台进程问题
killall httpd #杀死所有httpd程序
一旦使用了虚拟Web主机功能,所有的Web站点都必须用虚拟Web主机来实现,由上到下匹配,主配置文件中的一些配置都没用。
httpd的访问控制
使用
每个文件夹自动继承其父目录的ACL访问权限
除非针对子目录有明确设置
修改配置文件,同样尽量不要修改主配置文件
Require all denied|granted # 全体禁止访问或者允许
Require ip IP或网段地址 # 只允许某IP访问
SELinux安全上下文值(标签,标识文件或目录)
ls -Zd /var/www/ #查看目录的上下文值
以[目录a]为模版,修改[目录b]的上下文值 -R:递归修改
chcon -R --reference=[目录a] [目录b]
部署动态网站
1.方便客户端访问,网页跳转(网页访问路径别名)
修改配置文件
vim /etc/httpd/conf.d/[虚拟主机的配置文件]
Alias 客户端网络路径 服务器实际原始路径
客户端网络路径就是,客户端输入了域名后跟着写的路径,没有写默认为/
服务器原始路径就是,服务端的存储路径
Alias [客户端网络路径] [服务器实际原始路径]
#客户端访问到 网页文件根目录时,将webinfo.wsgi页面呈现
重启服务:systemctl restart httpd
2.翻译Python的Web页面内容
装包
yum -y install mod_wsgi #解释Python程序
配置
vim /etc/httpd/conf.d/[虚拟主机的配置文件]
WsgiScriptAlias [客户端网络路径] [服务器实际原始路径]
重启服务:systemctl restart httpd
补: UINX时间戳:自1970-1-1 0时0分0秒算起,到现在时间所经历的秒数
3.此虚拟主机侦听在端口8909
vim /etc/httpd/conf.d/[虚拟主机的配置文件]
Listen 8909
WsgiScriptAlias [客户端网络路径] [服务器实际原始路径]
4.SELinux非默认端口的开放
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 8909
-a:添加 -t:类型 -p:协议
systemctl restart httpd
总结:
1. 配置文件分为主配置文件,和自己创建的配置文件,一般一些功能写在自己创建的配置文件上
2. 修改了配置文件要重启服务
3. 分清楚网络地址和物理存储地址的关系,这个和配置文件中的DocumentRoot 有关系
4. 虚拟主机存在的时候,直接用IP,会调用第一个虚拟主机的信息
客户端调用的时候,出现端口不匹配或者域名不匹配,当中有一个不匹配时,会根据端口信息调用该端口中的第一个虚拟主机
5. httpd 可以对个别的目录或用户设置权限,而初始状态下,只有/var/www下的目录才有权限,所以在这个目录外创建一个目录作为网络根目录要注意单独赋权,还有selnux的上下文验证问题(chcon命令)
6. 修改端口号的时候,要修改配置文件还要修改selinux的开放问题(semanage命令)
7. 动态页面的配置要注意程序翻译的字段是 WgsiScriptAlias ……