基于端口的虚拟主机

HTTP 的默认端口是 80。
但是,大多数 Web 服务器都可以配置为在几乎任何端口号上运行,前提是该端口号未被服务器上的任何其他程序使用。

例如,服务器可能托管网站 www.example.com
但是,如果所有者希望运营第二个站点,并且无法访问其域名的域名配置,和/或者不拥有可用于从其为站点提供服务器的其他 IP 地址,则他们可以改用另一个端口数字,例如端口“81”的“www.example.com:81”,端口“8080”的“www.example.com:8080”,端口“8000”的“www.example.com:8000”

配置基于端口的虚拟主机的步骤

我将创建一个路径来演示这个场景

# mkdir /var/www/port
# cd /var/www/port/

创建用于测试目的的示例索引文件

# cat index.html
<h1> PORT BASED WEB HOSTING <h1>
#### Welcome to onitroad ####

编辑 apache 配置文件 /etc/httpd/conf/httpd.conf并进行以下更改。
使用“/”搜索“Listen 80”并将端口粘贴到其下

Listen 80
Listen 8080
# 在文件底部添加以下几行(根据您的环境进行必要的更改)
<VirtualHost 192.168.1.6:8080>
    ServerAdmin root@server1.example.com
    DocumentRoot /var/www/port
    ServerName www.example.com
    ErrorLog logs/server1.example.com-error_log
    CustomLog logs/server1.example.com-access_log common
</VirtualHost>

这里的 *表示 apache 服务器将侦听我们在机器上用于 Web 服务器配置的任何 IP。
你应该养成使用正确的 IP 或者名称而不是 *的习惯。

  • ServerAdmin: 设置服务器在返回给客户端的任何错误消息中包含的联系地址。超链接目标。但是,建议实际使用电子邮件地址。
  • ServerName:该指令设置服务器用于标识自身的请求方案、主机名和端口。这在创建重定向 URL 时使用。
  • DocumentRoot:此指令指定我们希望在 Web 服务器上可见的文件的根目录

验证配置

我们可以在浏览器上访问页面以验证配置

基于名称的虚拟主机

基于名称的虚拟主机是同一 Web 服务器 IP 地址的多个主机名

例如,服务器可能正在接收对两个域的请求,www.example.comwww.example.net,这两个域都解析为名称 IP 地址。
唯一的事情是,对于 www.example.com,服务器将从目录 /var/www/user/jack/site/发送 HTML 文件,而对 www.example.net的请求将使服务器页面来自 /var/www/user/cherry/site/

配置Apache服务器

也可以使用blog1.example.comblog2.example.com等来托管基于名称的服务器。

配置基于名称的虚拟虚拟主机的步骤。
为不同的用户创建两个不同的目录,如下所示

# mkdir -p /var/www/user/jack/site
# mkdir -p /var/www/user/cherry/site

接下来为用户“cherry”创建“index.html”

# cd  /var/www/user/cherry/site/
# cat index.html
<h1> NAME BASED WEB HOSTING <h1>
   #### Welcome cherry ####

同样为用户“jack”创建“index.html”

# cd  /var/www/user/jack/site/

示例 index.html内容

# cat index.html
<h1> NAME BASED WEB HOSTING <h1>
   #### Welcome jack ####

接下来编辑你的 /etc/httpd/conf/httpd.conf文件并在页面底部添加以下几行

<VirtualHost 192.168.1.6:80>
    ServerAdmin root@server1.example.com
    DocumentRoot /var/www/user/jack/site
    ServerName jack.example.com
    ErrorLog logs/server1.example.com-error_log
    CustomLog logs/server1.example.com-access_log common
</VirtualHost>
<VirtualHost 192.168.1.6:80>
    ServerAdmin root@server1.example.com
    DocumentRoot /var/www/user/cherry/site
    ServerName cherry.example.com
    ErrorLog logs/server1.example.com-error_log
    CustomLog logs/server1.example.com-access_log common
</VirtualHost>

httpd.conf文件中搜索 NameVirtualHost并添加以下行

NameVirtualHost 192.168.1.6:80

注意:提供服务器的 IP 地址而不是“192.168.1.6”

保存并退出文件

配置 DNS 服务器

重要说明:由于我们在专用网络中配置基于名称的虚拟主机,因此我们必须使用正确的记录配置自己的 DNS 服务器。

我们可以点击以下链接
分步教程:使用 bind chroot 配置 DNS 服务器 (CentOS/RHEL 7/8)

在这里,我将向我们简要展示我所做的更改

我为我的域 example.com 创建了两个 CNAME记录

# vi /var/named/example.com.zone
                IN NS           example.com.
                IN A            192.168.1.6
server1         IN CNAME        example.com.
www             IN CNAME        example.com.
jack          IN CNAME        example.com.
cherry            IN CNAME        example.com.

如我们所见,cherryjack都是我的域名服务器的别名,指向同一个 IP。

重新加载 dns 服务

# service named reload
Reloading named:                                           [  OK  ]

验证 CNAME 记录

# nslookup jack.example.com
Server:         192.168.1.6
Address:        192.168.1.6#53
jack.example.com      canonical name = example.com.
Name:   example.com
Address: 192.168.1.6
# nslookup cherry.example.com
Server:         192.168.1.6
Address:        192.168.1.6#53
cherry.example.com        canonical name = example.com.
Name:   example.com
Address: 192.168.1.6

重启apache服务

# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

确保你的 resolv.conf反映了你的 DNS

# cat /etc/resolv.conf
search example.com
nameserver 192.168.1.6

验证配置

我们还可以使用 curl工具验证 apache 配置

# curl cherry.example.com
<h1> NAME BASED WEB HOSTING <h1>
   #### Welcome cherry ####

在浏览器上验证相同

同样通过 CLI 验证基于名称的虚拟主机

# curl jack.example.com
<h1> NAME BASED WEB HOSTING <h1>
   #### Welcome jack ####

验证浏览器上的配置

Apache 中有哪些不同类型的虚拟主机?

虚拟主机是一种使用单个 IP 地址在服务器上托管多个域名的方法。
这允许一台服务器共享其资源,例如内存和进程周期,以便更有效地使用其资源。

Apache 中有 3 种类型的虚拟主机

  • 基于端口
  • 基于名称
  • 基于IP

基于 IP 的虚拟主机

基于 IP 的虚拟主机是一种根据接收请求的 IP 地址和端口应用不同指令的方法。
最常见的是,这用于在不同的端口或者接口上为不同的网站提供服务。

系统要求

正如术语基于 IP 所表明的那样,服务器必须为每个基于 IP 的虚拟主机使用不同的 IP 地址/端口组合。
这可以通过具有多个物理网络连接的机器或者通过使用虚拟接口来实现

就我而言,我在我的虚拟机中添加了一个另外的 NIC。
如果我们没有另外的 INC,我们始终可以为此创建一个虚拟以太网卡

# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:0C:29:51:AA:CD
          inet addr:192.168.1.7  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe51:aacd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:41253 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23317 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:60492500 (57.6 MiB)  TX bytes:1641927 (1.5 MiB)
          Interrupt:19 Base address:0x2424
eth3      Link encap:Ethernet  HWaddr 00:0C:29:51:AA:E1
          inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe51:aae1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7614 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5483 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2438197 (2.3 MiB)  TX bytes:731907 (714.7 KiB)
          Interrupt:17 Base address:0x2024
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:572 errors:0 dropped:0 overruns:0 frame:0
          TX packets:572 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:60978 (59.5 KiB)  TX bytes:60978 (59.5 KiB)

如我们所见,我将 eth1配置为 192.168.1.7eth3配置为 192.168.1.6

配置基于 IP 的虚拟主机的步骤

配置 Apache 服务器

让我们配置我们的 httpd.conf
从基于名称的虚拟主机复制相同的虚拟主机行并进行以下更改

<VirtualHost 192.168.1.6:80>
    ServerAdmin root@server1.example.com
    DocumentRoot /var/www/user/jack/site
    ServerName jack.example.com
    ErrorLog logs/server1.example.com-error_log
    CustomLog logs/server1.example.com-access_log common
</VirtualHost>
<VirtualHost 192.168.1.7:80>
    ServerAdmin root@server1.example.com
    DocumentRoot /var/www/user/cherry/site
    ServerName cherry.example.com
    ErrorLog logs/server1.example.com-error_log
    CustomLog logs/server1.example.com-access_log common
</VirtualHost>

搜索 Listen,我们将使用 Port 80作为我们的 Apache 服务器

Listen 80

接下来保存并退出文件

我将编辑我现有的 index.html文件以在示例页面上反映基于 IP 的网络托管

# cat index.html
<h1> IP BASED WEB HOSTING <h1>
   #### Welcome cherry ####

同样更新用户jack的index.html

# cd  /var/www/user/jack/site/

示例 index.html内容

# cat index.html
<h1> IP BASED WEB HOSTING <h1>
   #### Welcome jack ####

最后重启apache服务

# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

验证配置

在浏览器上验证用户“jack” http://192.168.1.6

同样验证用户cherry的 index.html http://192.168.1.7

日期:2020-06-02 22:17:20 来源:oir作者:oir