apache+虚拟主机
apache+虚拟主机
Apache(Apache HTTP Server)是一款广泛使用的开源 Web 服务器软件,而虚拟主机是 Apache 的一项核心功能,允许在同一台服务器上托管多个网站(域名),共享服务器的 IP 地址和硬件资源,无需为每个网站单独配置物理服务器
虚拟主机的核心原理
通过区分不同的域名(或 IP 地址、端口),Apache 可将请求转发到对应的网站目录,使多个网站在同一服务器上独立运行,用户访问时感知不到它们共享服务器
虚拟主机的两种主要类型
- 基于域名的虚拟主机(最常用)
- 多个域名绑定到同一服务器 IP,Apache 通过请求头中的
Host
字段(即访问的域名)识别对应的网站 - 示例:
www.siteA.com
和www.siteB.com
都指向服务器 IP192.168.1.100
,Apache 根据访问的域名分别返回/var/www/siteA
和/var/www/siteB
目录下的内容
- 多个域名绑定到同一服务器 IP,Apache 通过请求头中的
- 基于 IP 的虚拟主机
- 服务器配置多个 IP 地址,每个 IP 对应一个网站,Apache 通过请求的目标 IP 地址区分网站
- 需为服务器绑定多个 IP,适用于需要独立 IP 的场景(如早期 SSL 证书部署)
通过虚拟主机,Apache 能高效支持中小型网站部署,是 Web 服务器多站点托管的标准方案
首先配置yum仓库:
[root@syf ~]# cd /etc/yum.repos.d/
[root@syf yum.repos.d]# ls
qaq.repo
[root@syf yum.repos.d]# rm -rf *
[root@syf yum.repos.d]# vim ovo.repo
[qvq]
name=qvq1
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@syf yum.repos.d]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
安装httpd软件包:
[root@syf ~]# yum -y install httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-88.el7.centos will be installed
--> Finished Dependency ResolutionDependencies Resolved======================================================================Package Arch Version RepositorySize
======================================================================
Installing:httpd x86_64 2.4.6-88.el7.centos qvq 2.7 MTransaction Summary
======================================================================
Install 1 PackageTotal download size: 2.7 M
Installed size: 9.4 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionInstalling : httpd-2.4.6-88.el7.centos.x86_64 1/1 Verifying : httpd-2.4.6-88.el7.centos.x86_64 1/1 Installed:httpd.x86_64 0:2.4.6-88.el7.centos Complete!
[root@syf ~]# systemctl restart httpd
[root@syf ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@syf ~]# systemctl restart firewalld
[root@syf ~]# systemctl disable firewalld
[root@syf ~]# setenforce 0
接下来通过另一台主机内浏览器来访问主机2的ID地址
可以看到能访问测试网页
[root@syf3 ~]# nslookup
> syf2.example.com
Server: 114.114.114.114
Address: 114.114.114.114#53Non-authoritative answer:
*** Can't find syf2.example.com: No answer
>
[root@syf3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
DNS1=192.168.100.10
...
[root@syf3 ~]# systemctl restart network
[root@syf3 ~]# nslookup
> syf2.example.com
Server: 192.168.100.10
Address: 192.168.100.10#53Non-authoritative answer:
*** Can't find syf2.example.com: No answer
>
回到DNS做正向解析:
[root@syf ~]# cd /var/named/
[root@syf named]# ls
chroot data named.ca named.localhost ovo.com
com.ovo dynamic named.empty named.loopback slaves
[root@syf named]# vim ovo.com
$TTL 1D
@ IN SOA shenyifeng.example.com. root.example.com. (2025081101 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS shenyifeng.example.com.
shenyifeng IN A 192.168.100.10
lisi IN A 192.168.100.10
chenyu2 IN A 192.168.100.20
...
[root@syf named]# systemctl restart named
然后再回到客户端:
[root@syf3 ~]# nslookup
> syf2.example.com
Server: 192.168.100.10
Address: 192.168.100.10#53Name: syf2.example.com
Address: 192.168.100.20
>
[root@syf2 ~]# cd /var/www/html/
[root@syf2 html]# ls
[root@syf2 html]# echo "welcome to luoqi" > index.html
[root@syf2 html]# ls
index.html
[root@syf2 html]# cat index.html
welcome to luoqi
刷新一下
网页是默认放在/var/www/html/
也可以换位置
[root@syf2 ~]# mkdir /html
[root@syf2 ~]# cd /html/
[root@syf2 html]# echo syf > index.html
[root@syf2 html]# cat index.html
syf
如果想查看文件内容,需要改配置文件
[root@syf2 ~]# cd /etc/httpd
[root@syf2 httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@syf2 httpd]# cd conf
[root@syf2 conf]# ls
httpd.conf magic
[root@syf2 conf]# vim httpd.conf
...
DocumentRoot "/html"#
# Relax access to content within /var/www.
#
<Directory "/html">AllowOverride None# Allow open access:Require all granted
</Directory>
...
[root@syf2 conf]# systemctl restart httpd
刷新一下
改端口:
[root@syf2 conf]# vim httpd.conf
...
Listen 8080
...
[root@syf2 conf]# systemctl restart httpd
相同IP,不同的端口
相同的端口,不同的IP
相同的IP和端口,不同FQDN
先恢复到最开始的
[root@syf2 conf]# vim httpd.conf
...
Listen 8080
...
DocumentRoot "/var/www/html"#
# Relax access to content within /var/www.
#
<Directory "/var/www">AllowOverride None# Allow open access:Require all granted
</Directory>
...
[root@syf2 conf]# systemctl restart httpd
syf /var/www/syf/index.html----syf
qvq /var/www/syf/index.html----qvq
[root@syf2 ~]# cd /var/www/
[root@syf2 www]# ls
cgi-bin html
[root@syf2 www]# mkdir syf
[root@syf2 www]# mkdir qvq
[root@syf2 www]# echo syf > syf/index.html
[root@syf2 www]# echo qvq > qvq/index.html
网页创建好后,实现访问网页
相同IP,不同的端口
改虚拟主机的配置文件,需要先把虚拟主机配置的文件复制过来
[root@syf2 ~]# cd /etc/httpd/
[root@syf2 httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@syf2 httpd]# cd conf.d/
[root@syf2 conf.d]# ls
autoindex.conf README userdir.conf welcome.conf
[root@syf2 conf.d]# cd
[root@syf2 ~]# find / -name *vhost*.conf
/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
[root@syf2 ~]# cp -p /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/
[root@syf2 ~]# cd -
/etc/httpd/conf.d
[root@syf2 conf.d]# ls
autoindex.conf httpd-vhosts.conf README userdir.conf welcome.conf
[root@syf2 conf.d]# vim httpd-vhosts.conf
...
<VirtualHost 192.168.100.20:80>DocumentRoot "/var/www/syf"
</VirtualHost>Listen 8080
<VirtualHost 192.168.100.20:8080>DocumentRoot "/var/www/qvq"
</VirtualHost>
[root@syf2 conf.d]# systemctl restart httpd
相同的端口,不同的IP
[root@syf2 conf.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
ONBOOT=yes
IPADDR=192.168.100.20
PREFIX=24
IPADDR1=192.168.100.200
PREFIX1=24
GATEWAY=192.168.100.254
DNS1=114.114.114.114
...
[root@syf2 conf.d]# systemctl restart network
[root@syf2 conf.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:86:4f:27 brd ff:ff:ff:ff:ff:ffinet 192.168.100.20/24 brd 192.168.100.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.100.200/24 brd 192.168.100.255 scope global secondary noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::a1f3:8473:ead:c9b9/64 scope link noprefixroute valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:f1:60:ee brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000link/ether 52:54:00:f1:60:ee brd ff:ff:ff:ff:ff:ff
接下来改虚拟主机配置文件
[root@syf2 conf.d]# vim httpd-vhosts.conf
...
<VirtualHost 192.168.100.20:80>DocumentRoot "/var/www/syf"
</VirtualHost><VirtualHost 192.168.100.200:80>DocumentRoot "/var/www/qvq"
</VirtualHost>
[root@syf2 conf.d]# systemctl restart httpd
启动后进行测试访问
相同的IP和端口,不同FQDN
syf.example.com
qvq.example.com
先到DNS写入过来
[root@syf ~]# cd /var/named/
[root@syf named]# ls
chroot data named.ca named.localhost ovo.com
com.ovo dynamic named.empty named.loopback slaves
[root@syf named]# vim ovo.com
$TTL 1D
@ IN SOA shenyifeng.example.com. root.example.com. (2025081101 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS shenyifeng.example.com.
shenyifeng IN A 192.168.100.10
lisi IN A 192.168.100.10
chenyu2 IN A 192.168.100.20
syf IN A 192.168.100.20
qvq IN A 192.168.100.20
[root@syf named]# systemctl restart named
[root@syf2 ~]# nslookup
> 192.168.100.10
^C
[root@syf2 ~]# nslookup
> syf.example.com
Server: 192.168.100.10
Address: 192.168.100.10#53Name: syf.example.com
Address: 192.168.100.20
> qvq.example.com
Server: 192.168.100.10
Address: 192.168.100.10#53Name: qvq.example.com
Address: 192.168.100.20
>
[root@syf2 ~]# cd /etc/httpd/
[root@syf2 httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@syf2 httpd]# cd conf.d/
[root@syf2 conf.d]# vim httpd-vhosts.conf //复制修改,不动模版
...
<VirtualHost 192.168.100.20:80>DocumentRoot "/var/www/syf"ServerName syf.example.com
</VirtualHost><VirtualHost 192.168.100.20:80>DocumentRoot "/var/www/qvq"ServerName qvq.example.com
</VirtualHost>
[root@syf2 conf.d]# systemctl restart httpd