Linux环境下Apache2配置多个虚拟主机
多域名访问同一主机
从去年开始就一直维护着目前的这个技术博客,前不久突然想搭建一个与技术无关的个人网站,发布一些生活上的好玩趣事、发布一些自己的摄影作品。新域名备案成功后,遇到了一个问题,如何在拥有一台服务器,一个公网IP的情况下,部署两个或多个不同的网站。经过详细了解后,总结出这篇使用Apache2配置多个虚拟主机的教程。
我们的需求
假设我们现在拥有 www.a.com
和 www.b.com
两个域名,以及一个拥有公网IP ( 158.58.58.58
) 的服务器。
现在想通过不同域名访问同一个IP的服务器下,不同的根目录。例如:/var/www/a/
和 /var/www/b
。
第一步 : 修改hosts文件
- 用 vim 打开
/etc/hosts
文件。
[root@yourname /]# vim /etc/hosts
- 在文件末尾添加内容:IP地址 + 域名 (中间有空格)。
第二步 : 修改 httpd.conf
- 修改
httpd.conf
文件,找到NameVirtualHost *:80
,在语句前面加 # 注释。 - 如果配置文件是
apache2.conf
则直接跳过此步骤。
第三步 : 修改 httpd-vhosts.conf 或 000-default.conf 文件
- 修改配置文件
httpd-vhosts.conf
,在文件末尾加入如下代码:
<VirtualHost *:80>
DocumentRoot /var/www/a
ServerName www.a.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/b
ServerName www.b.com
</VirtualHost>
- 如果使用
apt-get
安装的 Apache2 ,请修改/etc/apache2/sites-enabled/000-default.conf
文件。添加代码同上。 - 重启 Apache :
sudo /etc/init.d/apache2 restart
sudo systemctl restart apache2
- 虚拟主机配置结束。
验证
使用浏览器分别输入 www.a.com
和 www.b.com
,验证是否配置成功。
可能出现的错误
错误提示:
AH00526: Syntax error on line 5 of /etc/apache2/sites-enabled/000-default.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
解决方法:
- RewriteEngine命令需要rewrite mod的支持
$>cd /etc/apache2/mods-enabled
$>sudo ln -s ../mods-available/rewrite.load rewrite.load
$>sudo /etc/init.d/apache2 restart