虚拟主机配置使用
虚拟主机可以让一个物理主机为多个站点提供服务,有三种实现方案:
- 基于 IP:为每个虚拟主机准备至少一个 IP 地址;
- 基于 Port:为每个虚拟主机准备至少一个专用 PORT(实践中很少用);
- 基于 HostName:为每个虚拟主机准备至少一个专用 HostName;
可混合使用上述三种方式中任意方式。
注意:一般虚拟主机不要与中心主机混用,所以,要使用虚拟主机,先禁用中心主机。
虚拟主机的配置也是在/etc/httpd/conf/httpd.conf
配置文件中完成的,禁用中心主机只需要注释DocumentRoot
字段即可。
每个虚拟主机都有专用配置,虚拟主机最基础的配置格式如下:
<VirtualHost "IP:PORT">
SeverName
Document Root
</VirtualHost>
除上述最基本的配置外,每个虚拟主机还可配置如下属性:
ServerAlias
:虚拟主机的别名;ErrorLog
:错误日志路径;CustomLog
:访问日志路径;<Directory ""> </Directory>
:基于目录做访问控制;
可用在中心主机中的大多数配置都可以使用在虚拟主机中。
基于IP配置
1、注释 DocumentRoot
字段,添加如下虚拟主机配置:
<VirtualHost 10.0.1.201:80>
ServerName web1.zze.xyz
DocumentRoot "/vhosts/web1/www"
</VirtualHost>
<VirtualHost 10.0.1.202:80>
ServerName web2.zze.xyz
DocumentRoot "/vhosts/web2/www"
</VirtualHost>
2、创建如上虚拟主机节点中配置的 DocumentRoot
路径。
在 /vhosts/web1/www
下新建 index.html
文件内容如下:
<h1>Virtual Host - Page 1</h1>
在 /vhosts/web2/www
下新建 index.html
文件内容如下:
<h1>Virtual Host - Page 2</h1>
3、目前本机只有一个 IP 为 10.0.1.201
,给网卡添加一个 IP:
$ ip addr add 10.0.1.202/24 dev eth0
这一步是本地网络配置情况而定。
使用 ip a
可以查看到网卡已经有了两个 IP 地址:
4、重新加载 httpd 服务:
$ service httpd reload
浏览器访问 10.0.1.201
,结果如下:
浏览器访问 10.0.1.202
,结果如下:
可以看到通过不同的 IP 访问到了不同虚拟主机的站点主页。
基于Port配置
基于 Port 配置的方式可直接与基于 IP 方式混用,下面则直接在上述基于 IP 配置的示例上做修改。
1、添加如下虚拟主机配置:
<VirtualHost 10.0.1.202:8080>
ServerName web3.zze.xyz
DocumentRoot "/vhosts/web3/www"
</VirtualHost>
2、要保证 Listen
字段定义的端口包含上述虚拟主机配置的端口,检查一下:
Listen 80
Listen 8080
3、在 /vhosts/web3/www
下新建 index.html
文件内容如下:
<h1>Virtual Host - Page 3</h1>
4、重启 httpd 服务,浏览器访问 10.0.1.202:8080
,结果如下:
即通过特定端口访问到了新创建的虚拟主机站点主页。
基于HostName配置
基于 HostName 配置的方式可直接与上述两种方式混用,下面则直接在上述基于 Port 配置的示例上做修改。
1、启用 NameVirtualHost
配置并配置如下:
NameVirtualHost 10.0.1.201:80
此步骤 httpd-2.4 可省略。
2、修改上述使用的三个虚拟主机如下:
<VirtualHost 10.0.1.201:80>
ServerName web1.zze.xyz
DocumentRoot "/vhosts/web1/www"
</VirtualHost>
<VirtualHost 10.0.1.201:80>
ServerName web2.zze.xyz
DocumentRoot "/vhosts/web2/www"
</VirtualHost>
<VirtualHost 10.0.1.201:80>
ServerName web3.zze.xyz
DocumentRoot "/vhosts/web3/www"
</VirtualHost>
3、修改本机 hosts 映射如下:
10.0.1.201 web1.zze.xyz web2.zze.xyz web3.zze.xyz
4、测试访问。
浏览器访问 web1.zze.xyz
,结果如下:
浏览器访问 web2.zze.xyz
,结果如下:
浏览器访问 web3.zze.xyz
,结果如下:
内置的Status页面
httpd 内部提供了一个页面能够让我们通过浏览器查看 http 服务的状态信息,要启用这个功能需要添加如下块:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 10.0.1
</Location>
重新加载 httpd 服务,浏览器访问 10.0.1.201/server-status
,结果如下:
上述页面中部分字段的描述如下:
Server Version
:服务器版本;Parent Server Generation
:父服务器进程目前生成的是第几代子进程;Current Time
:当前时间;Restart Time
:重启时间;Server uptime
:已启动时长;.
:每个.
表示一个可启用的进程;_
:每个_
表示一个空闲进程;S
:正在启动中的进程;R
:正在接收用户请求进程;W
:正在发送响应的进程;K
:保持连接的进程;D
:正在做 DNS 查询的进程;C
:正在断开的连接;L
:正在记录日志的进程;G
:正在优雅终止的进程;I
:空闲清理的进程;
如果要获取更详细的信息,还可在 /etc/httpd/conf/httpd.conf
中启用 ExtendedStatus
字段:
ExtendedStatus On
重新加载服务,浏览器刷新界面:
评论区