阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu/CentOS下Apache多站点配置

474次阅读
没有评论

共计 8190 个字符,预计需要花费 21 分钟才能阅读完成。

前言:

情景一:平时在我们开发的时候,一般项目都只存放在 localhost 指定的根目录下,当有好几个项目的时候,只能在根目录下以不同的文件夹区分,特别的不方便。

情景二:平时在看教学视频的时候,总是看到那些老师在单机下使用不同的域名,访问的却是本地的项目代码,每当这时候我都会问,这个怎么实现的。

情景三:在最近去实习面试的时候,面试官问我如何在 apache 服务器上搭建多站点。我只能回答我不会。

为了解决上面的几个问题,我决定把 apache 多站点配置这个知识点搞清楚。关键是搞懂 apache 虚拟主机,Apache 的虚拟主机是一种允许在同一台机器上,运行超过一个网站的解决方案。后面围绕的就是 apache 虚拟主机展开的。

在本篇博客中我将介绍两种方法来实现 apache 多站点的配置:

1、如何配置根据访问的域名区分配置不通的站点?
(比如,访问 www.linuxidc.com 访问的是 /home/www/linuxidc 项目,访问 www.wordpress.com 访问的是 /home/www/wordpress 项目)

2、在相同域名地址的情况下,如何通过访问不同的端口获得不同的站点?
(比如,访问 www.linuxidc.com 访问的是 /home/www/linuxidc 项目,访问 www.linuxidc.com:8080 访问的是 /home/www/linuxidc_admin 项目(即 linuxidc 的后台管理系统))

一:根据访问的域名区分站点

在这里我先介绍 Ubuntu 系统下的配置,在来讨论 CentOS 下(因为我在学习过程中也是先 ubuntu,再配置 centos 的时候都是参考的 ubuntu 的配置)

Ubuntu 环境下:

我的环境是:

操作系统:Ubnutu 16.04 LTS
apache 服务:Apache/2.4.18 (Ubuntu)(使用 apache2 -v 命令获取)

在 Ubnutu 上,apache 服务叫 apache2,而不是 httpd(在 Centos 上叫 httpd),主配置文件为 /etc/apache2/apache2.conf,我们打开 /etc/apache2/apache2.conf,发现最后两行为:

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

显然 /etc/apache2/sites-enabled 下存放着有关虚拟站点(VirtualHost)的配置。经查看,初始情况下,该目录下包含一个符号连接(软链接,相当于快捷方式):

000-default.conf -> ../sites-available/000-default.conf

这里又引出另外一个配置目录:/etc/apache2/sites-available。这个目录下放置了所有可用站点的真正配置文件,对于 Enabled 的站点,Apache2 在 sites-enabled 目录建立一个到 sites-available 目录下文件的符号链接。

/etc/apache2/sites-available 下有两个文件:

000-default.conf    default-ssl.conf

/etc/apache2/sites-enabled/000-default.conf 链接的文件是 /etc/apache2/sites-available/000-default.conf,我们就以 /etc/apache2/sites-available/000-default.conf 文件为例,看看一个 VirtualHost 的配置是啥样的(为了简洁,所有的注释我都去掉了):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DocumentRoot 是这个站点的根目录,这样 Apache2 启动时会扫描 /etc/apache2/sites-enabled 中可用的 website 配置并加载。当用户访问 localhost:80 时,Apache2 就将 default 站点根目录 /var/www/html 下的 index.html(或 index.PHP 等,可配置)作为请求的回应返回给浏览器,你就会欣赏到的就是 /var/www/html/index.html 这个文件中的内容了。

Apache2 的默认站点我们不要去动它。我们新增站点配置来满足我们的要求。

第一步:新增站点配置文件

在 /etc/apache2/sites-available 目录中中建立两个站点的配置文件 www-linuxidc-com.conf 和 www-wordpress-com.conf:

# 进入虚拟主机配置文件夹
cd /etc/apache2/sites-available/
# 复制默认的虚拟主机配置文件
sudo cp 000-default.conf www-linuxidc-com.conf
sudo cp 000-default.conf www-wordpress-com.conf

编辑这两个配置文件,以 www-linuxidc-com.conf 为例:

# Created By zhongjin on 2016-12-12 冬至
<VirtualHost *:80>
    ServerAdmin 1054840542@qq.com
    ServerName www.linuxidc.com
    DocumentRoot /home/www/linuxidc

    <Directory "/home/www/linuxidc">
        Options FollowSymLinks
        AllowOverride All 
        #Require all denied
        Require all granted
    </Directory>                            

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

注意上面配置中:ServerName、DocumentRoot 和 Directory 是我们重点关注的配置点。linuxidc 的 ServerName 为 www.linuxidc.com,根目录为 /home/www/linuxidc,Directory 同 DocumentRoot。

针对 www-wordpress-com.conf 改变相应的配置,即修改 ServerName 为 www.wordpress.com,DocumentRoot 和 Directory 修改为 /home/www/wordpress。

第二步:在 sites-enabled 目录下建立符号链接

cd /etc/apache2/sites-enabled
# 建立对应的软链接
sudo ln -s /etc/apache2/sites-available/www-linuxidc-com.conf /etc/apache2/sites-enabled/www-linuxidc-com.conf
sudo ln -s /etc/apache2/sites-available/www-wordpress-com.conf /etc/apache2/sites-enabled/www-wordpress-com.conf

第三步:在对应目录放入项目代码

如上面所示,我们的 linuxidc 项目代码放在 /home/www/linuxidc,wordpress 项目代码放在 /home/www/wordpress,那么我们在对应目录下创建对应目录并赋予相应权限,以 linuxidc 为例:

sudo mkdir -p /home/www/linuxidc

然后在 /home/www/linuxidc 下放入项目代码,这里为了测试就新建 index.php,内容如下:

<?php

echo "hello,welcome to linuxidc!";

赋予相应的权限:

sudo chmod -R 777 /home/www/linuxidc

针对 wordpress 做同样的操作。

第四步:修改 /etc/hosts 文件

打开查看 /etc/hosts 文件,开头是:

127.0.0.1   localhost

我们在该行后面添加:

# modified by zhongjin on 2016-12-21 冬至
127.0.0.1   www.linuxidc.com
127.0.0.1   www.wordpress.com

# 保存退出

第五步:重启 apache 服务器并测试

重启 apache 服务器使得配置生效:

systemctl restart apache2.service

在浏览器(如果是桌面版的话)中访问 www.linuxidc.com 或 www.wordpress.com,看看是否输出了 index.php 文件中的内容。

如果你不是桌面版(服务器),那么可以使用命令行测试:

curl www.linuxidc.com

看看返回的字符串是不是正确输出!

Centos 环境下:

我的环境是:

操作系统:Centos 7
apache 服务:Apache/2.4.6 (CentOS)(通过 httpd -v 获取)

在这里我们实现 Ubuntu 环境下同样的效果。

Centos 下,apache 的服务叫 httpd,主配置文件为 /etc/httpd/conf/httpd.conf,我们浏览 httpd.conf 文件,搜索关键字 vhost,发现根本找不到相关的东西,不过在最后两行有以下内容:

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

难道虚拟主机的配置也在 /etc/httpd/conf.d 下面?LZ 去看了一下该目录下面所有文件的内容,发现根本没有关于虚拟主机的配置,如果你再仔细观察 http.conf 配置文件,你就会发现,其实在 Centos 下,其默认主机只有 localhost ==> /var/www/html,如果需要的话,我们得自己扩展了。

我们有两种方式实现自己的扩展,一种是直接在 /etc/httpd/conf/httpd.conf 后面追加配置内容,一种是在外部文件先配置好,再类似 IncludeOptional conf.d/*.conf 那样引入我们的配置。一般不推荐直接修改主配置文件,所以我们使用第二种方式。

我们还是模仿上面的配置:

第一步:新增站点配置文件

cd /etc/httpd
sudo mkdir vhost-conf.d

我们在 vhost-conf.d 目录下新增我们的虚拟主机配置文件 www-linuxidc-com.conf 和 www-wordpress-com.conf,以 www-linuxidc-com.conf 为例,我们输入以下内容:

<VirtualHost *:80>
    #Created by zhongjin on 2016-12-21 冬至
    Serveradmin linuxidc@linuxidc.com
    ServerName www.linuxidc.com
    DocumentRoot /home/www/linuxidc

    <Directory "/home/www/linuxidc">
          Options FollowSymLinks
          AllowOverride All
          #Require all denied
          Require all granted
    </Directory>
</VirtualHost>

针对 www-wordpress-com.conf 改变相应的配置,即修改 ServerName 为 www.wordpress.com,DocumentRoot 和 Directory 修改为 /home/www/wordpress。

第二步:在主配置中引入我们的虚拟主机配置

sudo vim /etc/httpd/conf/httpd.conf
# 在主配置文件末尾添加以下内容
# Load vhost-config files in the "/etc/httpd/vhost-conf.d" directory if any
# created by zhongjin on 2016-12-21 冬至
Include vhost-conf.d/*.conf

第三步:在对应目录放入项目代码

直接参考 Ubnutu 环境下的第三步配置。

第四步:修改 /etc/hosts 文件

直接参考 Ubnutu 环境下的第四步配置。

第五步:重启 apache 服务器并测试

重启 apache 服务器使得配置生效:

sudo systemctl restart httpd.service

在浏览器(如果是桌面版的话)中访问 www.linuxidc.com 或 www.wordpress.com,看看是否输出了 index.php 文件中的内容。

如果你不是桌面版(服务器),那么可以使用命令行测试:

curl www.linuxidc.com

看看返回的字符串是不是正确输出!

注意:

在 Centos 下,由于默认的虚拟主机配置(localhost)是直接在 /etc/httpd/conf/httpd.conf 文件中配置的,所以我们在后面添加我们的配置的时候,会覆盖前面的相同的配置,所以当你 curl localhost 的时候,可能访问的是 linuxidc 项目下的代码,也可能是 wordpress 下的代码。

我的解决方案是:按照上面的步骤重新建一个 localhost 域名,使它指向 /var/www/html 目录即可。

二、同域名下,通过访问不同的端口获得不同的站点

其实在这里实现的步骤跟上面的没多大差别,我就说说需要做的额外操作。

这里以 linuxidc 为例,通过访问 www.linuxidc.com:80(默认就是 80),返回的是“hello,welcome to linuxidc“,而访问 www.linuxidc.com:8080,返回的是”hello,welcome to linuxidc background management“。

Ubuntu 环境下:

  • 让我们的 apache2 监听 8080 端口:

修改 /etc/apache2/ports.conf 文件,在 Listen 80 后面添加两行:

NameVirtualHost *:8080
Listen 8080
  • 在 /etc/apache2/sites-available/ 下增加 www-linuxidc-com-8080.conf,并在 /etc/apache2/sites-enabled/ 下建立符号链接。方法参考前面。

www-linuxidc-com-8080.conf 的主要配置内容如下:

<VirtualHost *:8080>
    #Created by zhongjin on 2016-12-21 冬至
    Serveradmin 1054840542@qq.com
    ServerName www.linuxidc.com
    DocumentRoot /home/www/linuxidc_admin

    <Directory "/home/www/linuxidc_admin">
          Options FollowSymLinks
          AllowOverride All
          #Require all denied
          Require all granted
    </Directory>
</VirtualHost>

大家一定要看清楚需要修改的地方,VirtualHost 改为 8080,DocumentRoot 和 Directory 均改为 /home/www/linuxidc_admin,但是 ServerName 不用改,还是用 www.linuxidc.com

  • 创建目录 /home/www/linuxidc_admin,添加文件 index.php,输出“hello,welcome to linuxidc background management”。

  • 重启 apache 服务器,测试

CentOS 环境下:

  • 让 httpd 监听 8080 端口:

直接修改 /etc/httpd/conf/httpd.conf 配置文件,在 Listen 80 后面添加两行:

# created by zhongjin on 2016-12-21 冬至
NameVirtualHost *:8080
Listen 8080
  • 在 /etc/httpd/vhost-conf.d 下面添加 www-linuxidc-com-8080.conf

直接复制 www-linuxidc-com.conf 文件,改名为 www-linuxidc-com-8080.conf,并修改为:

<VirtualHost *:8080>
    #Created by zhongjin on 2016-12-21 冬至
    Serveradmin 1054840542@qq.com
    ServerName www.linuxidc.com
    DocumentRoot /home/www/linuxidc_admin

    <Directory "/home/www/linuxidc_admin">
        Options FollowSymLinks
        AllowOverride All 
        #Require all denied
        Require all granted
    </Directory>
</VirtualHost>

注意修改的地方!

  • 创建目录 /home/www/linuxidc_admin,添加文件 index.php,输出“hello,welcome to linuxidc background management”。

  • 重启 apache 服务器,测试

后话:

多站点的配置还有另外一种配置,就是通过不同的 IP 进行多站点的配置,由于我没有进行实验(前面的内容都是 LZ 亲身体会过),所以这里就不给出方法了。

更多 Apache 相关教程见以下内容

CentOS6.8 编译安装 Apache2.4.25、MySQL5.7.16、PHP5.6.29  http://www.linuxidc.com/Linux/2016-12/138993.htm

CentOS 6.6 下安装 Apache 2.2.31 http://www.linuxidc.com/Linux/2017-02/140803.htm

Apache 配置多站点访问及二级域名配置  http://www.linuxidc.com/Linux/2017-03/141339.htm

Ubuntu 16.04 LTS 安装 Apache2+PHP7.0+MySQL+phpMyAdmin 图文详解  http://www.linuxidc.com/Linux/2017-02/140098.htm

CentOS 6 下 Apache 和 Tomcat 整合  http://www.linuxidc.com/Linux/2017-04/143021.htm

Apache 启用 gzip 压缩模块节约网站带宽  http://www.linuxidc.com/Linux/2017-04/142821.htm

Apache 配置 https  http://www.linuxidc.com/Linux/2017-02/140801.htm

使用 Apache 搭建 Web 网站服务器  http://www.linuxidc.com/Linux/2017-05/143468.htm

Linux 下 Apache 安装及实例  http://www.linuxidc.com/Linux/2017-02/140800.htm

Apache2.4.6 服务器安装及配置  http://www.linuxidc.com/Linux/2017-01/140006.htm

Ubuntu 16.04 下搭建 Web 服务器(MySQL+PHP+Apache) 教程  http://www.linuxidc.com/Linux/2017-01/139570.htm

CentOS 7 下 Apache 2.4.18 编译安装详解  http://www.linuxidc.com/Linux/2017-03/142003.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143590.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8190字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19356
评论数
4
阅读量
8320886
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
飞牛NAS升级到最新版,有线无法获取IP、无线网络莫名打开的BUG问题

飞牛NAS升级到最新版,有线无法获取IP、无线网络莫名打开的BUG问题

  飞牛 NAS 升级到最新版,有线无法获取 IP、无线网络莫名打开的 BUG 问题 星哥的飞牛 N...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...