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

介绍

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

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

使用虚拟主机,您可以使用一个服务器通过匹配机制从单个接口或IP托管多个域或站点。您配置域的请求以将访问者定向到包含该站点信息的特定目录。换句话说,您可以在一台服务器上托管多个网站。只要您的服务器能够支撑的起来。

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

准备

要完成本教程,您需要:

1、一台Debian 8的服务器

2、一个可以使用sudo命令的非root账户

3、服务器安装了Apache

在本教程中,我们会为创建虚拟主机example.comtest.com,在实际的操作过程中,请将两个示例的域名,替换成您自己的域名,并且域名要解析到您的服务器。

如果您没有可供使用的域,也可以使用example.comtest.com,但是要按照本教程的第五个步骤,配置本地主机文件,将这两个域名映射到服务器的IP地址。

第一步,创建目录结构

我们要采取的第一步是创建一个目录,该目录将保存我们将为访问者提供的站点数据。

这是目录(存储站点数据)都是要存放在/var/www的目录下面。我们将会为,每个虚拟主机创建一个目录,然后我们再对这些目录进行配置。

在每个目录中,我们将创建一个名为的文件夹public_html,用于保存我们要提供的网页。这使我们在将来部署更复杂的Web应用程序方面具有更大的灵活性; 该public_html文件夹将保存我们要提供的Web内容,父文件夹可以保存脚本或其他程序代码。

使用以下命令创建目录:

$ 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应该是您当前登录的账户。通过这样做的话,您当前登录的账户,也可以在public_html中存储文件了。

我们还应该稍微修改我们的权限,确保能够对一般的Web目录及其包含的所有文件和文件夹的读写,以便可以正确地提供页面。执行此命令可更改/var/www文件夹及其子项的权限:

$ sudo chmod -R 755 /var/www

您的Web服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在必要的文件夹中创建内容。现在让我们为每个站点创建一个HTML文件。

第二步,为每个虚拟主机创建首页

让我们为每个网站创建一个简单的index.html页面。这有助于我们确保稍后正确配置虚拟主机。

让我们从example.com的首页开始。使用nano或者其他您喜欢的编辑器辑index.html文件:

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

将以下内容粘贴到/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

然后编辑器复制过去的index.html文件:

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

/var/www/test.com/public_html/index.htmlExample.com替换成Test.com

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

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

第三步,创建新的虚拟主机文件

虚拟主机文件确定虚拟主机的实际配置,并决定了Apache Web服务器如何响应各种域请求。

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添加站点管理员的邮件,这样管理员接收到邮件。

ServerAdmin admin@example.com

接下来,我们需要添加两个新指令。在ServerName后面填上您的域名,,第二个名为ServerAlias,定义了应该匹配的其他名称,就好像它们是基本名称一样。这是匹配您定义额外的主机非常有用,这样example.comwww.example.com都能访问到服务器。

将这两个指令添加到/etc/apache2/sites-available/example.com.conf文件中,如下所示:

<VirtualHost *:80>

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

接下来就是找到DocumentRoot这一行,把默认路径修改为我们刚刚创建的目录,如下所示:

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>

保存并关闭文件。

同样的,我们就配置test.com.conf

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

打开并编辑test.com.conf文件:

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

修改完成后,您的/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>

保存并关闭文件。

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

第四步,启用新的虚拟主机文件

您已经创建了文件夹和虚拟主机配置文件,但是不激活它们,Apache是不会使用它们。您可以使用该a2ensite工具启用每个网站。

激活第一个站点:

$ sudo a2ensite example.com.conf

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

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

为了使更改生效,您必须重新加载Apache。但在此之前,请先启用其他站点:

$ sudo a2ensite test.com.conf

您将看到一条类似的消息,表明该网站已启用:

Enabling 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

现在已配置站点。我们来测试一下吧。如果您使用配置为指向服务器IP地址的真实域名,则可以跳过第5个步骤。但是,如果您没有域名,或者您只是进行测试,请继续看第5个步骤。

第五步,设置本地主机文件(可选)

如果您没有域名,或者您只是进行测试,我们可以修改本地计算机的hosts文件。

这将拦截您配置的域的任何请求并将它们指向您的VPS服务器,就像DNS系统在您使用注册域名是所做的那样。这只能在您的计算机上运行,并且仅用于测试目的。

确保在本地计算机上执行这些步骤,而不是在VPS服务器上执行这些步骤。您还需要知道本地计算机的管理密码或成为管理组的成员。

如果您使用的是Mac或Linux计算机,请输入以下命令编辑具有管理权限的本地文件:

$ sudo nano /etc/hosts

如果您在Windows上,请打开具有管理权限的命令提示符并输入:

c:\>  notepad %windir%\system32\drivers\etc\hosts

打开/etc/hosts文件后,输入以下内容,就可以将服务器的公共IP地址映射到每个域名,如以下示例所示:

127.0.0.1   localhost
...

111.111.111.111 example.com
111.111.111.111 test.com

这样子就可以在您有用本地计算机访问 example.com 和test.com两个域名,都将被解析111.111.111.111

保存并关闭文件。现在您可以测试您的设置。

第六步,测试结果

现在您已配置了虚拟主机,您可以通过转到在Web浏览器中配置的域轻松测试您的设置。访问第一个网站, http://example.com您将看到如下所示的页面:

http://example.com

同样,如果您可以访问第二个主机http://test.com,您将看到为第二个站点创建的文件:

http://test.com

如果这两个站点都运行良好,则您已在同一服务器上成功配置了两个虚拟主机。

注意:请不要随意修改hosts文件,否则容易出现问题,在完成本教程后,您有跟着第5个步骤修改了hosts文件,请将添加的内容删除!

结论

现在您的这台服务器处理两个独立的域名。如果您需要在Windows上搭建Apache环境,可以参考腾讯云实验基于 Windows 搭建 AMP (Apache/PHP/MySQL) 环境的相关课程。


参考文献:《How To Set Up Apache Virtual Hosts on Debian 8》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏dalaoyang

Linux安装Logstash

本文环境是在腾讯云服务器CentOS7.2搭建的,JDK1.8,Logstash-5.4.2。

74320
来自专栏铭毅天下

干货 | Elasticsearch 集群健康值红色终极解决方案

题记 Elasticsearch当清理缓存( echo 3 > /proc/sys/vm/drop_caches )的时候,出现 如下集群健康值:red,红...

91180
来自专栏云计算教程系列

如何在一个Ubuntu 16.04服务器上将Nginx配置为Web服务器和Apache的反向代理

Apache和Nginx是两种常用的PHP开源Web服务器。当托管具有不同要求的多个网站时,在同一虚拟机上运行它们会很有用。在单个系统上运行两个Web服务器的一...

27330
来自专栏Laoqi's Linux运维专列

LAMP搭建wordpress博客

LAMP(LINUX7.3+APACHE2.4+MYSQL5.6+PHP7.1)搭建wordpress博客 : 确认httpd服务有没有开启 ps aux | ...

52570
来自专栏野路子程序员

Centos7+Nginx+PHP 基础WEB运行环境-多虚拟主机配置

40750
来自专栏nice_每一天

转载 Elasticsearch开发环境搭建(Eclipse\MyEclipse + Maven)

作者:好记性不如烂笔头! 出处:http://www.cnblogs.com/zlslch/

20310
来自专栏我爱编程

如何安装https证书 (ubuntu+apache2)

搬运自知乎 FengYQ:https://zhuanlan.zhihu.com/p/43699640

44320
来自专栏云计算教程系列

如何在一个Ubuntu 18.04服务器上将Nginx配置为Web服务器和Apache的反向代理

Apache和Nginx是目前比较流行的两种常用于PHP的开源Web服务器。当托管具有不同要求的多个网站时,在同一虚拟机上运行它们会很有用。在单个系统上运行两个...

75200
来自专栏逍遥剑客的游戏开发

从Native到Web(一), NaCl学习笔记: 环境搭建

26620
来自专栏JAVA技术站

ubantu命令行安装nginx 转

8310

扫码关注云+社区

领取腾讯云代金券