Ubuntu 16.04 LTS 设置 Apache 虚拟主机

2017-7-10 10:32 Herald 168 UbuntuApacheUbuntu 16.04

概述

Apache 是非常流行的网页服务器,它即强大又灵活,全球近半数的网站运行在 Apache 之上。

Apache 将其功能和组件分解成可以独立定制和配置的单元。一个网站就是一个基础单元,通常被称为虚拟主机

虚拟主机能够实现在只有一个公网 IP 的服务器上托管多个网站,各个域名虽然绑定相同的 IP 地址,但访问时 Apache 会将请求指向域名对应的目录,只要服务器的负载允许,就可以在一台单 IP 服务器上托管无限多个网站。

准备工作

在继续本指南之前,你应该先了解《Ubuntu 16.04 服务器初始化设置指南》。

如果你还没有云服务器,请参考下列指南创建:

确保你的服务器已经安装了 Apache,如果还没有安装请使用以下命令安装:

sudo apt-get update
sudo apt-get install apache2

我们将配置一个域名为 example.com 以及一个域名为 test.com 的虚拟主机。这是两个示例域名并不能被他人访问的,我们会演示通过编辑本地计算机的 hosts 文件实现对这两个“假”域名的访问测试。你在实际设置的过程中要使用自己注册的国际域名。

你可能需要了解《如何设置国际域名解析》

第一步 创建目录结构

第一步要创建存放网站代码的相关目录。Apache 的默认 document root 文档根目录为 /var/www 。我们将在这里创建两个虚拟主机的目录,并在每个虚拟主机目录中创建 public_html 防止实际的网站代码。

执行以下代码创建目录结构:

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

注意:此处使用示例域名 example.com 和 test.com 作为虚拟主机目录名,你在设置时应该使用自己的真实域名。

第二步 设置权限

新创建的目录所有者为 root 用户,由于我们需要让普通用户能够需改网站目录中的文件,因此需要修改权限,执行以下命令:

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

$USER 是 Ubuntu 系统中的一个环境变量,代表当前登录系统的用户/组。权限设置完毕后,当前用户就成为 public_html 目录的所有者了。

我们同时应该对 Apache 的文档根目录作必要的权限设置,以确保目录能够被正常访问:

sudo chmod -R 755 /var/www

第三步 为每个虚拟主机创建演示页面

现在,Apache 就已经可以托管网页了,出于演示目的,我们创建一个简单的 index.html 页面。

example.com 站点目录下使用 nano 编辑器创建:

nano /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
<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body>
    <h1>Success!  The test.com virtual host is working!</h1>
  </body>
</html>

保存并关闭文件。

第四步 创建新的虚拟主机配置文件

虚拟主机配置文件是 Apache 实际的配置文件,用以识别不同的域名请求。

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 端口的请求。我们将根据要使用的域名进行修改并添加其他的指令。

首先修改 ServerAdmin 指令,设置管理员邮箱:

ServerAdmin admin@example.com

然后添加 ServerName 指令,设置虚拟主机绑定的域名。以及 ServerAlias 指令,设置虚拟主机的别名。

ServerName example.com
ServerAlias www.example.com

最后,要设置网站程序所在的目录,通过 DocumentRoot 指令:

DocumentRoot /var/www/example.com/public_html

最终,配置文件应该像下面这样:

<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

root 权限在编辑器打开新创建的配置文件:

sudo nano /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>

第五步 启用新的虚拟主机配置文件

创建了配置文件,需要使用 a2ensite 命令启用它们:

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

然后重启 Apache 服务:

sudo service apache2 restart

重启时可能会收到以下警告,它不会影响网站运行,可以暂时忽略:

 * Restarting web server apache2
 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

第六步 设置本地 hosts 文件(可选)

如果你没有国际域名,而是跟着本指南使用了假的测试域名,那就需要在本地计算机临时修改 hosts 文件映射测试域名才能实现对测试域名的访问。

这将拦截所有指向你服务器绑定域名的请求,且只有你本地计算机能够访问,仅适用于测试。

注意:这项设置是在你本地计算机上进行的,不要修改你服务器上的 hosts 文件。

如果你本地计算机是 Mac OS X 或 Linux 系统,使用 root 身份执行以下命令编辑:

sudo nano /etc/hosts

如果你使用 Windows 系统,应采用 find instructions on altering your hosts file 提供的修改 hosts 文件方法。

你需要在 hosts 文件中填写服务器的公网 IP 地址和测试域名。假设服务器的公网 IP 地址为 111.111.111.111,我们在 hosts 文件中应该按以下方式填写:

127.0.0.1   localhost
127.0.1.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

 

这样,我们的本地计算机就能拦截任何对 example.comtest.com 的请求(即充由本地计算机来解析这两个测试域名的 DNS),并将请求发送到我们的服务器 111.111.111.111。这样就能实现用测试域名访问服务器上的虚拟主机。

第七步 测试规则

现在打开浏览器输入一下网址测试访问:

http://example.com

你会看到以下内容的网页:

Apache virt host example

同样的,访问:

http://test.com

会看到页面内容为:

Apache virt host test

如果两个页面都正常显示,说明虚拟主机配置成功。

删除本地计算机中添加的映射记录,相应的测试域名也将无法访问。

总结

遵照上述步骤,你的服务器上现在就有了两个独立的网站,你可以重复上述步骤设置多个独立的网站。

Apache 对虚拟主机的数量没有限制,你可以根据需要设置无限多个独立的网站。

{{ headers["x-wp-total"] }} 条评论

{{ post_id = '2403' }}

回复 {{ reply_to }}