Apache/httpd(10)之虚拟主机配置使用与内置的Status页面

Apache/httpd(10)之虚拟主机配置使用与内置的Status页面

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

虚拟主机配置使用

虚拟主机可以让一个物理主机为多个站点提供服务,有三种实现方案:

  • 基于 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 地址:

image.png

4、重新加载 httpd 服务:

$ service httpd reload

浏览器访问 10.0.1.201,结果如下:

image.png

浏览器访问 10.0.1.202,结果如下:

image.png

可以看到通过不同的 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,结果如下:

image.png

即通过特定端口访问到了新创建的虚拟主机站点主页。

基于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,结果如下:

image.png

浏览器访问 web2.zze.xyz,结果如下:

image.png

浏览器访问 web3.zze.xyz,结果如下:

image.png

内置的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,结果如下:

image.png

上述页面中部分字段的描述如下:

  • 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

重新加载服务,浏览器刷新界面:

image.png

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/apachehttpd10.html

Buy me a cup of coffee ☕.