centos - 如何在CentOS 7上设置Apache虚拟主机
https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-centos-7
如何在CentOS 7上设置Apache虚拟主机
介绍
Apache Web服务器是在Internet上提供Web内容的最常用方式。它服务于互联网所有活跃网站的一半以上,并且非常强大和灵活。
Apache将其功能和组件分解为可单独定制和配置的单个单元。描述单个站点或域的基本单元称为虚拟主机。虚拟主机允许一台服务器使用匹配系统托管多个域或接口。这与想要在单个VPS上托管多个站点的任何人相关。
配置的每个域都会将访问者定向到保存该站点信息的特定目录,而不会指示同一服务器也负责其他站点。只要您的服务器可以处理所有站点吸引的流量,此方案就可以在没有任何软件限制的情况下进行扩展。
在本指南中,我们将介绍如何在CentOS 7 VPS上设置Apache虚拟主机。在此过程中,您将了解如何根据所请求的域向不同的访问者提供不同的内容。
先决条件
在开始本指南之前,需要先完成几个步骤。
您需要访问具有sudo
权限的非root用户的CentOS 7服务器。如果您尚未对此进行配置,则可以通过CentOS 7初始服务器设置指南来创建此帐户。
您还需要安装Apache才能为其配置虚拟主机。如果您还没有这样做,可以使用yum
通过CentOS的默认软件存储库安装Apache:
sudo yum -y install httpd
接下来,启用Apache作为CentOS服务,以便它在重新启动后自动启动:
sudo systemctl enable httpd.service
完成这些步骤后,通过SSH以非root用户帐户登录并继续本教程。
注意:本指南中的示例配置将为一个虚拟主机example.com
和另一个虚拟主机example2.com
。这些将在整个指南中引用,但您应该在跟随时替换您自己的域或值。要了解如何使用DigitalOcean设置域名,请点击此链接。
如果您没有任何可以使用的域,我们将向您展示如何在教程结束时使用虚拟值测试虚拟主机配置。
第一步 - 创建目录结构
首先,我们需要创建一个目录结构来保存站点数据以便为访问者提供服务。
我们的文档根目录(Apache查找用于查找要提供的内容的顶级目录)将设置为目录中的各个/var/www
目录。我们将在此处为我们计划制作的每个虚拟主机创建一个目录。
在每个目录中,我们将创建一个public_html
保存实际文件的目录。这为我们的托管提供了一些灵活性。
我们可以使用mkdir
命令创建这些目录(带有一个-p
标志,允许我们创建一个带有嵌套文件夹的文件夹):
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/example2.com/public_html
请记住,红色部分代表我们希望从VPS提供的域名。
第二步 - 授予权限
我们现在拥有文件的目录结构,但它们归我们的root
用户所有。如果我们希望我们的常规用户能够修改我们网站目录中的文件,我们可以通过以下方式更改所有权chown
:
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example2.com/public_html
$USER
当您提交命令时,该变量将采用您当前登录的用户的值。通过这样做,我们的常规用户现在拥有public_html
我们将存储内容的子目录。
我们还应该稍微修改我们的权限,以确保允许对一般Web目录以及内部的所有文件和文件夹进行读取访问,以便可以正确地提供页面:
sudo 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>
完成后保存并关闭文件。
我们可以index.html
通过输入以下内容复制此文件以用作第二个网站的模板:
cp /var/www/example.com/public_html/index.html /var/www/example2.com/public_html/index.html
现在让我们打开该文件并修改相关的信息:
nano /var/www/example2.com/public_html/index.html
<html>
<head>
<title>Welcome to Example2.com!</title>
</head>
<body>
<h1>Success! The example2.com virtual host is working!</h1>
</body>
</html>
保存并关闭此文件。您现在拥有测试虚拟主机配置所需的页面。
第四步 - 创建新的虚拟主机文件
虚拟主机文件指定了我们单独站点的配置,并指示Apache Web服务器如何响应各种域请求。
首先,我们需要设置存储虚拟主机的目录,以及告诉Apache虚拟主机已准备好为访问者提供服务的目录。该sites-available
目录将保留我们所有的虚拟主机文件,而该sites-enabled
目录将保存到我们要发布的虚拟主机的符号链接。我们可以输入以下两个目录:
sudo mkdir /etc/httpd/sites-available
sudo mkdir /etc/httpd/sites-enabled
注意:此目录布局是由Debian贡献者引入的,但我们在此处将其包括在内以增加管理虚拟主机的灵活性(因为以这种方式临时启用和禁用虚拟主机更容易)。
接下来,我们应该告诉Apache在sites-enabled
目录中查找虚拟主机。为此,我们将编辑Apache的主配置文件,并添加一行代表其他配置文件的可选目录:
sudo nano /etc/httpd/conf/httpd.conf
将此行添加到文件末尾:
IncludeOptional sites-enabled/*.conf
完成添加该行后,保存并关闭该文件。我们现在准备创建我们的第一个虚拟主机文件。
创建第一个虚拟主机文件
首先在编辑器中使用root权限打开新文件:
sudo nano /etc/httpd/sites-available/example.com.conf
注意:由于我们概述的配置,所有虚拟主机文件必须以.conf
。
首先,首先制作一对标签,将内容指定为侦听端口80(默认HTTP端口)的虚拟主机:
<VirtualHost *:80>
</VirtualHost>
接下来我们将声明主服务器名称www.example.com。我们还将指定服务器别名以指向example.com,以便对www.example.com和example.com的请求提供相同的内容:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
</VirtualHost>
注意:为了www
使域的版本正常工作,域的DNS配置将需要A记录或CNAME,将www
请求指向服务器的IP。通配符(*
)记录也可以。要了解有关DNS记录的更多信息,请查看我们的主机名设置指南。
最后,我们将通过指向可公开访问的Web文档的根目录来完成。我们还将告诉Apache在哪里存储此特定站点的错误和请求日志:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/error.log
CustomLog /var/www/example.com/requests.log combined
</VirtualHost>
完成这些项目的写入后,您可以保存并关闭该文件。
复制第一个虚拟主机并自定义其他域
现在我们已经建立了第一个虚拟主机文件,我们可以通过复制该文件并根据需要进行调整来创建第二个虚拟主机文件。
首先复制它cp
:
sudo cp /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-available/example2.com.conf
在文本编辑器中使用root权限打开新文件:
sudo nano /etc/httpd/sites-available/example2.com.conf
您现在需要修改所有信息以引用您的第二个域。完成后,您的第二个虚拟主机文件可能如下所示:
<VirtualHost *:80>
ServerName www.example2.com
DocumentRoot /var/www/example2.com/public_html
ServerAlias example2.com
ErrorLog /var/www/example2.com/error.log
CustomLog /var/www/example2.com/requests.log combined
</VirtualHost>
完成这些更改后,您可以保存并关闭该文件。
第五步 - 启用新的虚拟主机文件
现在我们已经创建了虚拟主机文件,我们需要启用它们,以便Apache知道为访问者提供服务。为此,我们可以为sites-enabled
目录中的每个虚拟主机创建一个符号链接:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
sudo ln -s /etc/httpd/sites-available/example2.com.conf /etc/httpd/sites-enabled/example2.com.conf
完成后,重新启动Apache以使这些更改生效:
sudo apachectl restart
第六步 - 设置本地主机文件(可选)
如果您一直使用示例域而不是实际域来测试此过程,则仍可以通过临时修改hosts
本地计算机上的文件来测试虚拟主机的功能。这将拦截您配置的域的任何请求并将它们指向您的VPS服务器,就像DNS系统在您使用注册域时所做的那样。但这仅适用于您的计算机,并且仅用于测试目的。
注意:确保您在本地计算机上运行这些步骤而不是VPS服务器。您将需要访问该计算机的管理凭据。
如果您使用的是Mac或Linux计算机,请hosts
键入以下命令编辑具有管理权限的本地文件:
sudo nano /etc/hosts
如果您使用的是Windows计算机,则可以在此处找到有关更改主机文件的说明。
您需要添加的详细信息是VPS的公共IP地址,后跟您要用于访问该VPS的域:
127.0.0.1 localhost
127.0.1.1 guest-desktop
server_ip_address example.com
server_ip_address example2.com
这将指示任何请求example.com
和example2.com
我们的本地计算机上,并将它们在发送到我们的服务器server_ip_address
。
第七步 - 测试你的结果
现在您已配置了虚拟主机,您可以通过转到在Web浏览器中配置的域来轻松测试您的设置:
http://example.com
你应该看到一个如下所示的页面:
同样,如果您访问其他域,您将看到为其创建的文件。
如果您配置的所有站点都运行良好,那么您已在同一CentOS服务器上成功配置了新的Apache虚拟主机。
如果您调整了家庭计算机的hosts
文件,则可能需要删除已经验证配置有效的线路。这将阻止您的hosts文件填充实际不必要的条目。
结论
此时,您现在应该有一个CentOS 7服务器处理具有单独域的多个站点。您可以按照上面概述的步骤扩展此过程,以便稍后创建其他虚拟主机。Apache可以处理的域名数量没有软件限制,因此可以随意使用服务器能够处理的域名数量。