第八章 web服务之apache(2)
8.3 虚拟主机
8.3.1 功能简介
若一台服务器上,需要架设多个站点,则可以通过虚拟主机技术来实现。但是虚拟主机技术的问题点在于该服务器内如何区分不同的站点。这里,有三种技术可以实现:基于ip、基于port(端口),基于域名。
1、基于ip的方式,需要一块网卡设置多ip,不同的站点工作在不同ip上。
可以使用如下命令给网卡增加ip:
ifconfig ens33:1 192.168.10.100 ---创建网卡子接口:1,设置ip
但是如上的设置仅是临时生效的,若要永久生效,还是需要使用nmtui命令配置。
不过,若服务器上架设较多的站点,那么一块网卡上会设置很多的ip,所以这种方式比较麻烦,而且服务器在公网上,需要使用公网ip,而公网ip是收费的,所以这种方式成本较高,不太实用。
2、基于port的方式,是让不同的站点工作在同一ip上,但在不同的端口上,如:让rzz在80口上、让baidu在800上,qq在8000等,但是这种方式需要客户端记忆不同站点的端口,很不方便客户的使用。所以这种方式也不很实用
3、基于域名的方式,是多个站点都工作在同一ip及80端口上,由于客户访问时多是使用域名的方式,所以我们的服务器也把不同站定绑定各自的域名,实现区分。这也就需要DNS服务器的支持。
8.4.2 基于域名的案例演示
我们仍使用之前的实验服务器,部署虚拟主机。本例中我们创建rzz2、rzz3两个站点。
首先,先来创建各网站的页面:
cd /var/www/html
mkdir rzz2 rzz3
echo www.rzz2.com > rzz2/index.html
echo www.rzz3.com > rzz3/index.html
然后再来编辑配置文件
vi /etc/httpd/conf/httpd.conf
#文件的最后追加
namevirtualhost 192.168.10.1 ---指定本机支持虚拟主机的网卡
<virtualhost 192.168.10.1:80> ---创建虚拟站点,指定ip和端口
servername www.rzz2.com ---设定FQDN
documentroot /var/www/html/rzz2 ---该虚拟主机的网页存放位置
</virtualhost>
<virtualhost 192.168.10.1:80> ---创建另一个虚拟站点
servername www.rzz3.com
documentroot /var/www/html/rzz3
</virtualhost>
保存退出
systemctl restart httpd ---重启服务
使用之前讲过的DNS服务,在服务器上面创建rzz2.com和 rzz3.com的区域,并设定好A记录指向本web服务器
客户端网卡设置好DNS,使用浏览器访问www.rzz2.com和www.rzz3.com可见访问成功。PS:在这我就偷个懒,不做演示截图了,读者可自行配置DNS验证,美其名曰锻炼一下大家的综合实验能力。
注:虚拟主机建立后,原服务器站点会失效。
8.4.3 虚拟主机管理设置
现在我们设定好了虚拟主机,但是像之前的访问控制、身份验证语句是不可以写到虚拟主机的容器(即<virtual></virtual>容器中)的。所以若要针对虚拟主机的站点设定访问控制及身份验证,需要专项配置。
cd /etc/httpd/conf.d ---进入配置文件的存放目录,apache固定指定在这里
vi rzz2.conf ---给某个虚拟主机单独设置管理配置文件
<directory "/var/www/html/rzz2"> ---针对网页路径,设置容器
#写入访问控制、身份验证语句
</direcroty>
注:针对rzz3的站点配置相同
systemctl restart httpd
重启服务后,针对单个站点的配置即可生效了。
8.5 SSL安全套阶层协议
8.5.1 SSL简介
SSL,全称Secure Sockets Layer 安全套接层,简称套阶层协议,属于应用层协议,它的访问协议头是:https://,即http+ssl。它主要有两个功能:一是在网页登录时,对数据进行高级加密传输,提高了安全性;二是可以有服务发布证书,以证明自己的合法性。PS:具体SSL的通信认证原理较为复杂,我们现阶段只需要了解功能,能够部署相关服务即可,若读者有兴趣,可以自行查阅相关资料学习。
关于加密,大家应该都很了解其功能了,下面主要来介绍一下证书的事情。我们平日在上网时,如果访问的是网银或支付宝相关账户,那么安全性要求就要提高很多。但是我们怎么知道我们所打开的网站是真正的官网呢?如果被人恶意把访问请求转移到了一个假网站,盗取账号、密码。所以我们作为用户是无法知道真假的,因此,SSL就提供了一个证书机制,网站的运行商可以向全球的权威认证机构CA发送请求,通过审核后,CA会给该企业颁发一个证书。企业可以把证书发布到自己的网站上,客户端访问时使用https://的协议头访问,并且客户端的浏览器会自动检查该网站的证书,若有问题(如超期或颁发对象有误),浏览器会自动报错。
当我们使用浏览器访问网站时,若地址栏显示的是https://协议头时,说明正在使用ssl协议通信,可以在浏览器菜单栏(点alt键可显示出菜单栏)的文件=>属性=>证书 中看到网站的证书。如下图:
图中可见到淘宝网的证书信息。
现今国内申请的证书颁发机构主要有: Symantec、Thawte、GeoTrust、GlobalSign等。
另外,SSL服务器的通信端口是 TCP 443
8.5.2 SSL部署
下面我们来演示一下证书的发布过程,由于我们使用的是模拟环境,所以并没有真正的证书,只能使用ssl相关程序,模拟CA机构给网站颁发一个用于实验的证书。
首先,配置文件中删除虚拟主机的配置,恢复默认站点的使用,然后按照如下步骤操作:
yum -y install openssl mod_ssl ---安装程序包
1、制作证书密钥
openssl genrsa -des3 -out /mnt/miyao.key 1024
---制作秘钥,并指定密钥长度为1024,会要求设置密钥密码
openssl rsa -in /mnt/miyao.key -out /mnt/miyao.key
---清空密钥密码
2、借助密钥,制作申请
openssl req -new -key /mnt/miyao.key -out /mnt/shenqing.csr
---生成申请,后缀:.csr
注:制作申请的过程中会要求输入企业的相关信息,可按提示输入,如下图:
图中按输入顺序:国家、省份、城市、企业名、部门、要颁发的域名、通信邮箱,之后的附加密码的信息可以直接回车略过
到此我们只做完毕了申请文件,按照正常流程应该联系ca机构,上传申请,审批企业资质通过后,付费,即可获得证书。下面的步骤是为了实验,模拟生成证书的命令。
3、模拟生成证书
openssl req -new -x509 -days 365 -key /mnt/miyao.key -out /mnt/zhengshu.crt ---生成证书,后缀:.crt
4、发布证书
vi /etc/httpd/conf.d/ssl.conf ---编辑ssl的配置文件
找到 <virtualhost _default_:443> 容器中
解注释: documentroot /var/www/html
servername www.rzz.com:443 ---指定发布证书的网站FQDN,ssl通信端口:443
找到:SSLCertificateKeyFile /mnt/miyao.key ---指定密钥文件
SSLCertificateFile /mnt/zhegnshu.crt ---指定证书文件
注:其实该配置文件中已有密钥及证书的指向,这些都是安装完ssl之后自带的证书文件,是可以使用的。在本实验中,我们使用的是自己创建的密钥及证书。
systemctl restart httpd
重启服务后,客户端浏览器输入https:www.rzz.com便可以访问验证,也可以使用ip访问。
PS:此实验的客户端建议使用win7,因为win2003为服务器版,浏览器的默认安全设置较高,对于这种假证书的审核是要屏蔽掉的,降低安装设置的方法有比较麻烦,所以建议使用win7的浏览器。效果如下图:
因为我们使用的证书是假的,所以浏览器会有安全风险的提示,点击继续即可成功:
可以点击alt键后,在出菜单栏的文件=>属性=>证书中查看到我们自己制作的证书:
可见到证书是由自己颁发给自己的。
8.6 php安装
关于网页制作,除了最基本的html网页制作语言外,网页的后台功能,如:登录、注册、数据的增删改查等,还需要专门的后台开发语言完成,现今市面上比较常见的后台语言有:asp、jsp、php。asp是微软推出的页面后台语言,一般支持windows服务器,linux系统上是不使用的;jsp语言是java的页面后台开发语言,需要java编译环境,我们将在后面的tomcat部分介绍;php是现今使用率很高的后台语言,windows、Linux系统都可以使用,适合于中小型网站的架设。所以,我们需要配置apache服务支持php语言开发的网页。
下面就来介绍一下php环境的部署过程。其实非常简单,我们只需要安装php的相关软件包,重启httpd服务即可让apache兼容php页面了。具体过程如下:
yum -y install php php-pear php-mbstring
vim /etc/httpd/conf/httpd.conf
找到:DirectoryIndex行,后追加 index.php,即支持php的主页文件
cd /var/www/html
rm –f index.html ---删除原有主页
vi index.php ---创建php的测试主页
<?php
phpinfo();
?>
注:该主页的功能是显示服务器上当前php的版本,遵守的是php的语法要求
systemctl restart httpd
客户端访问验证。
8.7 apache的工作模式
apache作为web服务,我们最为关心的是能够承载多少的并发点击。其实apache相应客户时有三种不同的方式:
1、prefork MPM 模式
默认模式。apache主程序,针对每一个客户访问,开启一个独立的进程做响应。
对内存、CPU资源的消耗比较大。适合于并发数较少,页面程序较多的站点
2、worker MPM 模式
由apache主程序,开启多个子进程,每个子进程内部分多个线程,每个线程响应一个客户访问。适合于并发数多,点击量较大的站点。
3、event MPM
apache主进程响应客户访问,当客户做用户登录后,主进程将开启一个独立的子进程响应登陆后的客户操作。
这种模式更配合的是网站的登录验证功能,但登录验证功能在实际生产环境中使用较少。PS:一般都是靠后台代码实现会员的注册与登录,使用数据库存储会员信息。
适合于多用户登录,需要权限划分的站点。一般不用。
这三种模式的配置文件如下:
vi /etc/httpd/conf.modules.d/00-mpm.conf ---工作模式配置文件
注释、解注释相关设置即可更改工作模式,如下图: