如何在CentOS 7上设置Apache虚拟主机

介绍

Apache Web服务器是在Internet上提供Web内容的最常用方式,将其功能和组件分解为可单独定制和配置的单个单元。描述单个站点或域的基本单元称为虚拟主机。虚拟主机允许一台服务器使用匹配系统托管多个域或接口。

在本教程中,我们将介绍如何在CentOS 7 服务器上设置Apache虚拟主机。在此过程中,您将了解如何根据所请求的域向不同的访问者提供不同的内容。如果Apache配置虚拟主机问题,也可以访问腾讯云社区查看相关解决方案

准备

在开始本指南之前,需要先完成几个步骤。

  1. 你需要有一个具有sudo权限的非root用户的CentOS 7服务器。
  2. 您还需要安装Apache才能为其配置虚拟主机。可以使用yum通过CentOS的默认软件存储库安装Apache:
sudo yum -y install httpd

接下来,启用Apache作为CentOS服务,以便它在重新启动后自动启动:

sudo systemctl enable httpd.service

完成这些步骤后,通过SSH以非root用户帐户登录并继续本教程。

第一步 - 创建目录结构

首先,我们需要创建一个目录结构来保存站点数据以便为访问者提供服务。

我们的文档根目录(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

第二步 - 授予权限

我们现在拥有文件的目录结构归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 hmod -R 755 /var/www

您的Web服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在相应的文件夹中创建内容。

第三步 - 为每个虚拟主机创建Demo页面

现在我们已经有了目录结构,让我们创建一些内容,我们的页面将非常简单。我们将为每个标识该特定域的站点创建一个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

接下来,我们令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.comexample.com的请求提供相同的内容:

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
</VirtualHost>

注意:为了使域的www版本正常工作,域的DNS配置将需要一个A记录或CNAME,将www请求指向服务器的IP。通配符(*)记录也可以。

最后,我们将指向可公开访问的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文件来测试虚拟主机的功能。这将拦截您配置的域的任何请求并将它们指向您的服务器。但仅用于测试目的。

注意:确保您在本地计算机上运行这些步骤。您将需要访问该计算机的管理凭据。

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

sudo nano /etc/hosts

如果您使用的是Windows计算机,则可以在此处找到有关更改主机文件的说明。

您需要添加的详细信息是服务器的公共IP地址,后跟您要用于访问该服务的域:

127.0.0.1   localhost
127.0.1.1   guest-desktop
server_ip_address example.com
server_ip_address example2.com

这将指示任何example.comexample2.com的请求到我们的本地计算机上,并将它们发送到我们再server_ip_address的服务器上。

第七步 - 测试你的结果

现在您已配置虚拟主机,您可以通过进入在Web浏览器中配置的域来轻松测试您的设置:

http://example.com

你应该看到一个如下所示的页面:

结果界面

同样,如果您访问其他域,您也将看到为其创建的文件。

如果您配置的所有站点都运行良好,那么您已在CentOS服务器上成功配置了新的Apache虚拟主机。

如果您调整了计算机的hosts文件,则可能需要删除已经验证配置有效的线路。因为这将避免您的hosts文件被填充大量不必要的条目。

结论

本教程介绍了CentOS 7上设置Apache虚拟主机,如果您使用了Debian系统,可以参考腾讯云社区的如何在Debian 8上设置Apache虚拟主机的教程。


参考文献:《How To Set Up Apache Virtual Hosts on CentOS 7》

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库

从目录信息泄露到渗透内网

信息安全公益宣传,信息安全知识启蒙。 教程列表见微信公众号底部菜单 1、目录信息泄露 目录信息泄露是指当当前目录无index.html/index.asp/in...

53590
来自专栏Java架构师学习

详细介绍如何搭建ELK集群

Logstash 1.1 安装 注:安装在需要收集日志的机器上。 cd /data/softs sudo wget https://download.ela...

47070
来自专栏JavaEdge

HTML5新特性1 <aside> 标签

<aside> 标签定义其所处内容之外的内容 aside 的内容应该与附近的内容相关。 网站中主要有以下两种使用方法

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

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

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

15240
来自专栏指路者

Virtualmin一键安装包快速安装Virtualmin教程

Virtualmin是一个基于Webmin的虚拟主机管理模块,也是当前最受欢迎的开源虚拟主机管理软件。是在它的协助下,可以使得虚拟主机变的更为快速、可靠、安全。...

44010
来自专栏linux运维学习

linux学习第三十九篇:Apache用户认证,域名跳转,Apache访问日志

Apache用户认证 虚拟主机的配置文件: vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf ...

253100
来自专栏nice_每一天

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

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

20310
来自专栏野路子程序员

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

40750
来自专栏铭毅天下

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

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

91280
来自专栏名山丶深处

CentOS在线安装RabbitMQ3.7

40270

扫码关注云+社区

领取腾讯云代金券