Apache 之一 - 虚拟主机
关于 Apache 安装部分,请参考:在 ubuntu 22.04 中,通过源码编译安装 LAMP 中的 Apache 服务
注意:以下操作都在 root 用户下执行
Apache 主配置文件
1.编辑 apache 主配置文件 /usr/local/apache2/conf/httpd.conf
,将默认的虚拟主机配置注释掉,即找到下面这段配置并进行注释:
1 | DocumentRoot "/usr/local/apache2/htdocs" |
2.同时,找到 #Include conf/extra/httpd-vhosts.conf
行,将前面的注释符号 #
去掉,表示启用虚拟主机配置文件!
1 | sed -i 's@#Include conf/extra/httpd-vhosts.conf@Include conf/extra/httpd-vhosts.conf@' /usr/local/apache2/conf/httpd.conf |
基于端口的虚拟主机
基于端口的虚拟主机是指通过不同的端口来区分不同的虚拟主机。在同一个IP地址上,可以通过不同的端口提供不同的网站服务,每个端口对应一个独立的虚拟主机。这种方式可以实现在同一台服务器上通过不同端口提供多个网站服务。
基于 80 端口
1.创建 web 存放目录:
1 | mkdir -p /data/websites/apache/site01 |
2.在 web 目录创建测试的静态网页文件 index.html ,内容为:
1 | echo '这是 apache 基于 80 端口配置的虚拟主机' > /data/websites/apache/site01/index.html |
3.编辑虚拟主机配置文件 /usr/local/apache2/conf/extra/httpd-vhosts.conf
,将其默认的所有配置都注释掉,然后添加以下内容:
1 | ##基于 80 端口的配置 |
注意:
- 如果在配置虚拟主机时使用 80 端口以外的端口,那么还需要在 apache 主配置文件中添加
Listen PORT
,否则系统不会监听虚拟主机配置的端口,最终就会导致配置的虚拟主机资源不可访问! - 如果虚拟主机使用默认的 80 端口,则在配置虚拟主机时不能将
<VirtualHost *:80>
简写成<VirtualHost>
,否则会报<VirtualHost> directive requires additional arguments
这个错!
4.执行命令 apachectl -t
检查 apache 配置是否有误
1 | apachectl -t |
5.执行命令 systemctl restart apache.service
重启 apache 服务:
1 | systemctl restart apache.service |
6.打开浏览器测试使用服务器 IP 访问,看内容是否为上面第二步创建的静态网页内容:
基于非 80 端口
1.创建 web 存放目录:
1 | mkdir -p /data/websites/apache/site02 |
2.在 web 目录创建测试的静态网页文件 index.html ,内容为:
1 | echo '这是 apache 基于非 80 端口配置的虚拟主机' > /data/websites/apache/site02/index.html |
3.编辑虚拟主机配置文件 /usr/local/apache2/conf/extra/httpd-vhosts.conf
,在该文件中新增一个非 80 端口的虚拟主机配置,内容如下:
1 | cat << 'EOF' >> /usr/local/apache2/conf/extra/httpd-vhosts.conf |
注意:
- 如果在配置虚拟主机时使用 80 端口以外的端口,那么还需要在 apache 主配置文件中添加
Listen PORT
,否则系统不会监听虚拟主机配置的端口,最终就会导致配置的虚拟主机资源不可访问! - 同时,
<VirtualHost *:81>
配置内容后面的*:81
不能省。
4.编辑 apache 主配置文件 /usr/local/apache/conf/httpd.conf
,找到 Listen 80
这一行配置,在下面添加一行 Listen 81
。其它保持默认,保存退出配置文件!
5.执行命令 apachectl -t
检查 apache 配置是否有误
1 | apachectl -t |
6.执行命令 systemctl restart apache.service
重启 apache 服务:
1 | systemctl restart apache.service |
7.打开浏览器测试使用服务器 IP:PORT 访问,看是否能正确访问到静态网页内容:
基于域名的虚拟主机
基于域名的虚拟主机是指通过不同的域名来区分不同的虚拟主机,它们可以共享同一个IP地址,但根据不同的域名来访问不同的网站。
如果你服务器是公网的,且有域名,那么先要去将自己的域名做好解析(域名如何作解析这里就不作介绍了),比如我自己的域名解析如下图:
- 因为我的服务器是大陆的,且没有作域名备案,所以下面的域名实例都是用本地环境进行配置(apache 版本及安装步骤与上面的一模一样);
- 本地 hosts 文件解析:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15127.0.0.1 localhost
127.0.1.1 leazhi-ubuntu2310
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.3.120 apache.abc.com
192.168.3.120 apache02.abc.com
192.168.3.120 apache03.abc.com
192.168.3.120 apache04.abc.com
192.168.3.120 apache05.abc.com
基于单域名
1.创建 web 存放目录:
1 | mkdir -p /data/websites/apache/site03 |
2.在 web 目录创建测试的静态网页文件 index.html ,内容为:
1 | echo '这是 apache 基于单域名的虚拟主机' > /data/websites/apache/site03/index.html |
3.编辑虚拟主机配置文件 /usr/local/apache2/conf/extra/httpd-vhosts.conf
,在该文件中新建一个基于单域名的虚拟主机配置,内容如下:
1 | cat << 'EOF' >> /usr/local/apache2/conf/extra/httpd-vhosts.conf |
注意:
- 如果你的服务器在中国大陆,且在有做备案的前提下,那么你就可以直接使用域名的进行访问;否则,就只能使用 域名+端口 的形式访问;
- 如果你的服务器不在中国大陆,且在没有做备案的前提下,那么你也可以使用域名随意访问;
4.执行命令 apachectl -t
检查 apache 配置是否有误
1 | apachectl -t |
5.执行命令 systemctl restart apache.service
重启 apache 服务:
1 | systemctl restart apache.service |
6.打开浏览器输入我们配置的域名,看是否能正确访问到静态网页内容:
6.1.这个是因为服务器在大陆,且域名没有备案,所以提示无法访问,如图:
6.2.下面这个是本地环境的配置,由于我们做了本地 hosts 解析,所以可以正常使用域名访问:
基于多域名
1.创建 web 存放目录:
1 | mkdir -p /data/websites/apache/site04 |
2.在 web 目录创建测试的静态网页文件 index.html ,内容为:
1 | echo '这是 apache 基于多域名的虚拟主机' > /data/websites/apache/site04/index.html |
3.编辑虚拟主机配置文件 /usr/local/apache2/conf/extra/httpd-vhosts.conf
,在该文件中新建一个基于单域名的虚拟主机配置,内容如下:
1 | cat << 'EOF' >> /usr/local/apache2/conf/extra/httpd-vhosts.conf |
注意:
- 如果你的服务器在中国大陆,且在有做备案的前提下,那么你就可以直接使用域名的进行访问;否则,就只能使用 域名+端口 的形式访问;
- 如果你的服务器不在中国大陆,且在没有做备案的前提下,那么你也可以使用域名随意访问;
4.执行命令 apachectl -t
检查 apache 配置是否有误
1 | apachectl -t |
5.执行命令 systemctl restart apache.service
重启 apache 服务:
1 | systemctl restart apache.service |
6.打开浏览器测试使用多个域名进行访问:
基于 IP 的虚拟主机
基于IP的虚拟主机是指通过不同的IP地址来区分不同的虚拟主机。当一个服务器有多个IP地址时,可以根据不同的IP地址来提供不同的网站服务,每个IP地址对应一个独立的虚拟主机。这样可以实现在同一台服务器上托管多个网站,并且每个网站都可以拥有独立的IP地址。
1.创建 web 存放目录:
1 | mkdir -p /data/websites/apache/site05 |
2.在 web 目录创建测试的静态网页文件 index.html ,内容为:
1 | echo '这是 apache 基于 IP 的虚拟主机' > /data/websites/apache/site05/index.html |
3.编辑虚拟主机配置文件 /usr/local/apache2/conf/extra/httpd-vhosts.conf
,在该文件中新建一个基于单域名的虚拟主机配置,内容如下:
1 | cat << 'EOF' >> /usr/local/apache2/conf/extra/httpd-vhosts.conf |
4.执行命令 apachectl -t
检查 apache 配置是否有误
1 | apachectl -t |
6.执行命令 systemctl restart apache.service
重启 apache 服务:
1 | systemctl restart apache.service |
7.打开浏览器测试使用服务器 IP:PORT 访问,看是否能正确访问到静态网页内容:
在实际工作中,基于端口、基于域名和基于 IP 经常混着使用,上面实例只是给个基础的引导
注意: 在同一个虚拟主机配置文件中,同时配有基于 IP 、基于 端口和基于 域名的虚拟主机在访问站点资源是有优先级的,其优先级为:基于 IP > 基于 域名 > 基于端口