如何在Debian上设置Apache虚拟主机

・1 分钟阅读

介绍

Apache web服务器是互联网上提供网络内容最流行的方式,它占了互联网上所有活跃网站的一半上,而且非常强大和灵活。

Apache将它功能和组件分解为独立的单元,你可以独立定制,描述单个站点或域的基本单元称为虚拟主机。

使用虚拟主机,可以使用匹配机制在单个接口或IP中使用一台服务器来承载多个域或站点,换句话说,你可以在单个服务器上承载多个网站,只要服务器能处理负载,这个方案就可以扩展,没有软件限制。

在本教程中,你将在Debian服务器上设置两个Apache虚拟主机,根据访问者访问的域名为他们提供不同的内容。

前提条件

要完成本教程,你需要:

有非sudo权限的非root用户的Debian 8服务器,你可以在初始Server Setup与Debian 8指南中设置有这些权限的用户,Apache已安装,并且配置,如下所示如何在Debian 8上安装Linux,apache,mysql,php (LAMP )堆栈

步骤1创建目录结构

我们要做的第一步是建立一个目录结构,它将保存我们为访问者提供的站点数据。

我们为要配置的每个虚拟主机创建一个目录。

使用以下命令创建目录:


sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

由于使用sudo创建了目录,所以,它们属于root用户,如果我们希望普通用户能够修改我们网站目录中的文件,我们更改所有权,如下所示:


sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html

$USER变量使用你当前登录的用户的值,当你按ENTER时,这样,普通用户现在拥有了public_html子目录,我们在其中存储内容。

我们还需要修改权限,以确保允许读取通用web目录以及所包含的所有文件和文件夹,执行此命令以更改/var/www文件夹及它子文件夹的权限:


sudo chmod -R 755 /var/www

我们的目录结构已经就绪,让我们创建一些内容来服务。

步骤2为每个虚拟主机创建默认页

为每个站点创建一个简单的index.html页面,

example.com的页面开始,使用以下命令编辑新的index.html文件:


nano /var/www/example.com/public_html/index.html

在此文件中,创建一个简单的HTML文档,该文档指示访问者正在查看example.com的主页:

/var/www/example. com/public_html/index.html

<html>
 <head>
 <title>Welcome to Example.com!</title>
 </head>
 <body>
 <h1>Success! The example.com virtual host is working!</h1>
 </body>
</html>

完成后保存并关闭文件。

现在将此文件复制到test.com站点:


cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

然后在编辑器中打开该文件:


nano /var/www/test.com/public_html/index.html

更改文件,使它引用example.comtest.com instaed :

/var/www/test. com/public_html/index.html

<html>
 <head>
 <title>Welcome to Test.com!</title>
 </head>
 <body> <h1>Success! The test.com virtual host is working!</h1>
 </body>
</html>

保存并关闭此文件,现在你有了测试虚拟主机配置所需的页面,接下来,让我们来配置虚拟主机。

步骤3创建新的虚拟主机文件

Apache带有一个默认的虚拟主机文件000-default.conf,你可以使用它作为跳转点,复制第一个域的此文件:


sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

注意:在Debian 8中的默认Apache配置要求每个虚拟主机文件结束.conf

在编辑器中打开新文件:


sudo nano /etc/apache2/sites-available/example.com.conf

文件将类似于下面的例子,其中包含一些附加注释:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>

 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html

 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

此虚拟主机匹配在端口80 (默认HTTP端口)上进行的请求,对这个配置做一些修改,并添加一些新的指令。

首先,将ServerAdmin指令更改为站点管理员可以通过电子邮件接收电子邮件的电子邮件。

/etc/apache2/sites-available/example.com.conf

ServerAdmin admin@example.com

接下来,我们需要添加两个新指令,第一个称为ServerName,为这个虚拟主机定义建立基本域,第二个称为ServerAlias,定义了应该匹配的名称,如果这两个主机都指向这个服务器地址的IP地址,那么这对于匹配定义的其他主机非常有用,因此example.comwww.example.com都可以。

将这两个指令添加到配置文件中,在ServerAdmin行之后:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>

 ServerAdmin webmaster@localhost
 ServerName example.com
 ServerAlias www.example.com
 DocumentRoot /var/www/html
...

接下来,通过更改DocumentRoot指令以指向为此主机创建的目录,更改此域的文档root的位置:


DocumentRoot /var/www/example.com/public_html

完成这些更改后,你的文件应该如下所示:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>
 ServerAdmin admin@example.com
 ServerName example.com
 ServerAlias www.example.com
 DocumentRoot /var/www/example.com/public_html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

保存并关闭文件。

然后创建第二个配置文件,方法是创建此文件的副本:


sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

在编辑器中打开新文件:


sudo nano /etc/apache2/sites-available/test.com.conf

然后更改相关设置以引用你的第二个域,完成后,你的文件将如下所示:

/etc/apache2/sites-available/test.com.conf

<VirtualHost *:80>
 ServerAdmin admin@test.com
 ServerName test.com
 ServerAlias www.test.com
 DocumentRoot /var/www/test.com/public_html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

保存并关闭文件。

现在我们已经创建了虚拟主机文件,我们可以启用它们。

步骤4启用新的虚拟主机文件

你可以使用a2ensite工具来启用你的每个站点。

激活第一个站点:


sudo a2ensite example.com.conf

如果文件中没有语法错误或拼写错误,则你将看到以下输出:


OutputEnabling site example.com.
To activate the new configuration, you need to run:
 service apache2 reload

为了使你的更改生效,你必须重新加载Apache ,但是,在执行这个操作之前,请启用其他站点:


sudo a2ensite test.com.conf

你将看到一个类似的消息,表明该站点已启用:


OutputEnabling site test.com.
To activate the new configuration, you need to run:
 service apache2 reload

接下来,使用a2dissite命令禁用000-default.conf中定义的默认站点:


sudo a2dissite 000-default.conf

现在,重启Apache :


sudo systemctl restart apache2

站点现在已配置。

讨论
杨和超 profile image