介绍
Apache 网页服务器是互联网上提供网页内容的最流行的方式,占互联网上所有活跃网站的一半以上,并且非常强大和灵活。
Apache将其功能和组件分为单个单元,可独立定制和配置,描述单个网站或域的基本单元称为虚拟主机
。
这些指定允许管理员使用一个服务器来托管单个界面或IP之外的多个域或网站,使用匹配机制。
每个配置的域将引导访问者到一个特定的目录,其中包含该网站的信息,从不表示相同的服务器也对其他网站负责。
在本指南中,我们将向您介绍如何在Ubuntu 14.04 VPS上设置Apache虚拟主机。
前提条件
在您开始本教程之前,您应该 创建非根用户如下所述的步骤 1-4 在这里。
您还需要安装Apache才能通过这些步骤工作. 如果您尚未这样做,您可以通过apt-get
在您的服务器上安装Apache:
1sudo apt-get update
2sudo apt-get install apache2
完成这些步骤后,我们可以开始。
对于本指南的目的,我的配置将为example.com
创建一个虚拟主机,而为test.com
创建另一个虚拟主机。
要了解 如何使用 DigitalOcean 设置域名,请遵循此链接。
我们将在稍后展示如何编辑本地主机文件以测试配置,如果您正在使用虚假值,这将允许您从家用电脑测试您的配置,即使您的内容不会通过域名提供给其他访问者。
步骤一:创建目录结构
我们将采取的第一个步骤是创建一个目录结构,该目录将包含我们将为访问者提供的网站数据。
我们的文档根
(Apache寻找内容的顶级目录)将被设置为/var/www
目录下的个别目录,我们将为我们计划创建的两个虚拟主机在这里创建一个目录。
在每个 these 目录中,我们将创建一个public_html
文件夹,该文件将包含我们的实际文件。
例如,对于我们的网站,我们会这样制作我们的目录:
sudo mkdir -p /var/www/example.com/public_html sudo mkdir -p /var/www/test.com/public_html
红色部分代表了我们希望从我们的VPS服务的域名。
步骤二:授权
现在我们有我们的文件的目录结构,但它们属于我们的根用户. 如果我们希望我们的普通用户能够修改我们的网页目录中的文件,我们可以通过这样做改变所有权:
sudo chown -R $USER:$USER /var/www/example.com/public_html sudo chown -R $USER:$USER /var/www/test.com/public_html
$USER
变量将取代您当前登录的用户的值,就像您点击ENTER
时一样。
我们还应该稍微修改我们的权限,以确保阅读访问被允许到一般的网页目录和其中的所有文件和文件夹,以便可以正确地服务页面:
1sudo chmod -R 755 /var/www
您的 Web 服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在所需的文件夹中创建内容。
步骤三:为每个虚拟主机创建演示页
我们有我们的目录结构,让我们创建一些内容来服务。
我們只會進行演示,所以我們的頁面將非常簡單,我們只會為每個網站製作一個「index.html」頁面。
让我们从example.com
开始,我们可以在编辑器中打开一个index.html
文件,键入:
nano /var/www/example.com/public_html/index.html
在此文件中,创建一个简单的HTML文档,说明它所连接的网站。
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html>
保存并关闭文件,当你完成。
我们可以复制此文件以使用为基础我们的第二个网站通过键入:
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
<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
在 root 特权的编辑器中打开新文件:
sudo nano /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 [email protected]
在此之后,我们需要添加两条指令。第一条指令,称为ServerName
,建立了应该匹配这个虚拟主机定义的基域。这很可能会是您的域。第二条指令,称为ServerAlias
,定义了进一步的名称,它们应该匹配,就好像它们是基本名称。这对于匹配您定义的主机有用,如www
:
ServerName example.com ServerAlias www.example.com
对于一个基本的虚拟主机文件,我们唯一需要改变的就是这个域的文档根位置,我们已经创建了所需的目录,所以我们只需要改变‘DocumentRoot’指令来反映我们创建的目录:
DocumentRoot /var/www/example.com/public_html
总的来说,我们的 virtualhost 文件应该是这样的:
<VirtualHost *:80> ServerAdmin [email protected] 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
在您的编辑器中打开新的 root 特权文件:
sudo nano /etc/apache2/sites-available/test.com.conf
您现在需要修改所有信息,以参考您的第二个域. 当您完成时,它可能看起来像这样的东西:
<VirtualHost *:80> ServerAdmin [email protected] 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>
保存并关闭文件,当你完成。
步骤五:启用新的虚拟主机文件
现在我们已经创建了我们的虚拟主机文件,我们必须启用它们。
我们可以使用a2ensite
工具来启用我们的每个网站,如下:
sudo a2ensite example.com.conf sudo a2ensite test.com.conf
完成后,您需要重新启动 Apache 以使这些更改生效:
1sudo service apache2 restart
您很可能會收到一則訊息,說明類似於:
1* Restarting web server apache2
2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
这是一个无害的信息,不会影响我们的网站。
步骤六:设置本地主机文件(可选)
如果您尚未使用您所拥有的实际域名来测试此过程,并且已经使用了一些示例域名,那么您至少可以通过在本地计算机上暂时修改主机
文件来测试此过程的功能。
这将拦截您配置的域的任何请求,并将其指向您的VPS服务器,就像DNS系统如果您使用注册的域一样。
请确保您在本地计算机上运行这些步骤,而不是 VPS 服务器,您需要知道计算机的管理密码,或者是管理组成员。
如果您在 Mac 或 Linux 计算机上,请通过键入编辑本地文件的管理权限:
1sudo nano /etc/hosts
如果您在 Windows 计算机上,您可以在这里 找到关于更改您的主机文件的说明 。
您需要添加的详细信息是您的VPS服务器的公共IP地址,然后是您想要使用的域名来访问该VPS。
对于我在本指南中使用的域名,假设我的VPS IP地址是111.111.111.111
,我可以将以下行添加到我的主机文件的底部:
127.0.0.1 localhost 127.0.1.1 guest-desktop 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://test.com
您将看到您为您的第二个网站创建的文件:
如果这两个网站都正常工作,那么您已经在同一个服务器上成功配置了 两个虚拟主机。
如果您调整了家用计算机的主机文件,您可能想要删除您现在添加的行,因为您已经验证了您的配置工作,这将防止您的主机文件填充不必要的条目。
如果您需要长期访问,请考虑为您需要的每个网站购买一个域名,并将其设置为指向您的VPS服务器(https://www.digitalocean.com/community/articles/how-to-set-up-a-host-name-with-digitalocean)。
结论
如果你遵循,你现在应该有一个单一的服务器处理两个单独的域名. 你可以通过遵循我们上面描述的步骤来扩展这个过程,以创建额外的虚拟主机。
对于Apache可以处理的域名数量,没有软件限制,所以可以尽可能多地创建您的服务器。