基于端口的虚拟主机
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.com
和 www.example.net
,这两个域都解析为名称 IP 地址。
唯一的事情是,对于 www.example.com
,服务器将从目录 /var/www/user/jack/site/
发送 HTML 文件,而对 www.example.net
的请求将使服务器页面来自 /var/www/user/cherry/site/
配置Apache服务器
也可以使用blog1.example.com
和blog2.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.
如我们所见,cherry
和 jack
都是我的域名服务器的别名,指向同一个 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 ####
验证浏览器上的配置
虚拟主机是一种使用单个 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.7
,eth3
配置为 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