1. 什么是虚拟主机
虚拟主机指通过在一台物理计算机上设置多个逻辑主机,来实现多个网站共享一台计算机资源的方法。而在Apache中,虚拟主机的实现方式就是配置多个网站,让它们共享同一个IP地址、端口号,但通过不同的域名或者不同的绑定IP来区分不同的网站。
在实际应用中,我们可以通过修改Apache的配置文件来配置虚拟主机。而在创建虚拟主机时,我们常常需要基于端口来进行配置,下面详细介绍基于端口配置虚拟主机的方法。
2. 基于端口的虚拟主机
在Apache中,基于端口的虚拟主机的配置方法很简单,只需要修改Apache的配置文件httpd.conf,在文件中增加如下配置即可:
Listen 80
<VirtualHost *:80>
ServerName www.example1.com
DocumentRoot /var/www/example1
<Directory /var/www/example1>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Listen 81
<VirtualHost *:81>
ServerName www.example2.com
DocumentRoot /var/www/example2
<Directory /var/www/example2>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
2.1 配置说明
上述配置中,我们在Listen指令中添加了端口号,代表Apache监听的端口号。然后在每个VirtualHost指令中,我们同样指定了端口号,并设置了对应的网站信息。
比如,在第一个VirtualHost中,我们指定了ServerName为www.example1.com,DocumentRoot为/var/www/example1。这意味着,当用户通过该主机名访问该IP和端口时,Apache会将请求转发到/var/www/example1这个目录下对应的网页或者脚本。
在第二个VirtualHost中,我们同样指定了ServerName为www.example2.com,DocumentRoot为/var/www/example2。这意味着当用户通过www.example2.com这个域名访问该IP和端口时,Apache会将请求转发到/var/www/example2这个目录下对应的网页或者脚本。
2.2 配置细节
需要注意的是,当我们基于端口来配置虚拟主机时,需要保证相应的端口没有被占用。否则,Apache会启动失败并提示端口被占用的错误信息。
此外,我们还需要通过防火墙来打开相应的端口,让外部用户可以访问到我们的虚拟主机。具体方法可以参考各个Linux系统的防火墙配置方法。
3. HTTPS虚拟主机
在基于端口的虚拟主机中,如果我们还需要支持HTTPS协议,我们同样可以通过增加一个Listen指令和一个VirtualHost指令来实现,如下所示:
Listen 443
<VirtualHost *:443>
ServerName www.example1.com
DocumentRoot /var/www/example1
<Directory /var/www/example1>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/your_intermediate.crt
</VirtualHost>
3.1 HTTPS配置说明
与HTTP配置类似,我们同样需要在Listen指令中添加端口号443。然后在对应的VirtualHost指令中,我们同样设置了ServerName和DocumentRoot。
不同的是,我们还增加了三个SSL指令,分别用于开启SSL引擎和配置证书。其中,SSLCertificateFile、SSLCertificateKeyFile和SSLCertificateChainFile分别代表服务器证书、私钥和中级机构证书,需要根据实际情况替换。
需要注意的是,为了能够支持HTTPS协议,我们还需要开启SSL模块。可以通过如下命令来开启:
sudo a2enmod ssl
sudo service apache2 restart
3.2 HTTPS配置细节
需要注意的是,在配置https虚拟主机时,发现Apache2.4版本和Apache2.2版本对SSL的配置不同。在2.4版本中,SSLCertificateChainFile指令应更名为SSLCAcertificateFile。
此外,还需要注意证书的安全性,需要确保证书本身是合法可信的,包括证书的颁发机构和有效期等信息。可以通过向CA机构申请证书来获取合法可信的SSL证书。
而对于已有的本地Apache服务器,在调试时可以使用自签名证书,但是在上线时需更换为合法的证书。
4. 总结
本文介绍了Apache如何基于端口创建虚拟主机的方法。通过在httpd.conf文件中增加Listen和VirtualHost指令即可实现基于端口的虚拟主机。而在需要支持HTTP协议的情况下,还需要使用SSL模块开启HTTPS服务,并配置相应的证书和密钥。
在实际应用中,我们可以根据需要来增加或删除VirtualHost指令,来配置多个不同的虚拟主机,从而实现多网站共享一台计算机资源的目的。