是否可以在 Ubuntu 14.04 中的 localhost 上设置多个本地域?

是否可以在 Ubuntu 14.04 中的 localhost 上设置多个本地域?

我需要多个唯一的域名,它们都链接到我电脑的本地 IP 地址。这是为了测试目的。我希望能够将不同的本地域名链接到我电脑上的不同 html 文件。例如,xxx.local 和 yyy.local 都是不同的,但只能从我的电脑访问。

我尝试过:配置 apache2 的 sites-enabled 和 sites-available,使 xxx.local 和 yyy.local 的 .conf 文件链接到不同的 DocumentRoot。但是,这个问题没有解决,当我将它们链接到我计算机的本地 IP 地址时,它们都只链接到已经链接到我计算机本地主机的 html 文件。而不是 .conf 文件中 DocumentRoot 指定的 html 文件。

答案1

大部分工作都在目录中的配置文件中完成 /etc/apache2/sites-enabled/,该文件名为 000-default.conf。此文件允许您拥有多个虚拟域,例如 www.example.dev 或 example.local 等。您可以在此文件中设置它们及其目录,并输入多个站点以/etc/hosts进行匹配。所有站点都具有相同的本地主机 IP 地址,但名称会将其定向到正确的虚拟主机。

在此文件中,您需要根据需要多次克隆默认设置,如下所示:

原创内容

<VirtualHost *:80>
   . . .
</VirtualHost>

附加虚拟主机条目

<VirtualHost *:80>
    <Directory  /var/www/html/site1>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
    DocumentRoot  /var/www/html/site1/ 
    ServerName site1.local
    ServerAlias www.site1.local
</VirtualHost>

<VirtualHost *:80>
    <Directory  /var/www/html/site2>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
    DocumentRoot  /var/www/html/site2/ 
    ServerName site2.local
    ServerAlias www.site2.local
</VirtualHost>

. . .

为了使重写魔法发挥作用,您还需要确保重写引擎已启用。这可以通过在 mods-enabled 中创建指向 mods-available 中模块的符号链接来实现。如果您 cd 到/etc/apache2/mods-enabled,然后输入ln -s ../mods-available/rewrite.load,它将启用重写引擎。

然后,在 中/etc/hosts/,您有匹配的条目,如下所示:

127.0.0.1  site1.local
127.0.0.1  site2.local

这应该可以让你继续前进,直到我完成这个,或者你有问题要我回答。

评论 1 中问题的答案

一个问题是“DocumentRoot”指令:指定的目录应该只是虚拟站点的文档根目录,很可能不是/var/www/arcadr.local/html指定的“”。通常,站点目录应该位于末尾。“arcadr.local”是一个任意名称,但与站点匹配可能是最好的。因此,它可能应该是“'/var/www/html/arcadr.local/'”。

至于 ln 错误,如果我有更多时间,我会解释说,最重要的是您需要目录中一个名为“rewrite.load”的符号链接,mods-enabled该链接链接到目录中的实际文件mods-available。显然,您已经拥有它,并且实际上不需要再次执行此操作,但只要它在那里,它就应该可以工作。

尝试一下这个改变,并试着理解它的作用。其实它很容易理解,一旦你开始理解,你就会学到更多。

顺便说一句,“别名”指令不是必需的,我只是添加它来说明如果你愿意的话如何做到这一点。

评论 2 中问题的答案

默认 html 文件只是文件 000-default.conf 中指定的几个虚拟主机之一。注意我最初省略了文件的“.conf”扩展名。你找到正确的文件了吗?它必须在“ sites-enabled”中,而不是“ sites-available”。与 mods 相同,你可以拥有多个站点可用的,但你需要有一个已启用,默认值为“ 000-default.conf”(除非我设置后它发生了变化)。

您说“arcadr.local 只是将我重定向到连接到我的本地主机的另一个 .local 网站。”请确保您已正确设置此配置文件。它应该有一系列块,如 html:

<VirtualHost *:80>
   . . .
</VirtualHost>

每个虚拟主机都必须以这些指令开始和结束,并且不能将一个指令嵌入另一个指令中。

您可以在 apache.org 网站上找到一些很好的文档和示例。我在这里学会了如何设置文件。我的建议是保持简单,如果您添加任何您不理解的内容,请一步一步进行,并删除任何不起作用的内容。以下是一些示例: VirtualHost 示例

一些额外的提示

每当你修改配置文件时/etc/apache2/sites-enabled/000-default.conf,都需要重启 Apache 服务器。我使用命令sudo /etc/init.d/apache2 restart来执行此操作。 编辑:Gabriel 为此发布了一个更好的命令:

sudo service apache2 restart

但至少目前这两个命令都可以起作用。

同样的技巧也适用于动态 DNS 服务器,例如 noip.com、dyndns 等。例如,我刚刚在家庭系统上创建了 3 个示例站点。如果我的计算机已打开,您可以尝试一下。如果您检查一下,您会发现所有 3 个站点都具有完全相同的 IP 地址,但转到不同的虚拟站点(默认站点的变体,您可以在leftcoast.noip.us

http://site1.leftcoast.noip.us/
http://site2.leftcoast.noip.us/
http://site3.leftcoast.noip.us/

答案2

要实现此目的,您需要采取两个步骤。

首先,它要向您的计算机指出您希望它在 127.0.0.1 处查找 xxx.local 和 yyy.local,这通常意味着 localhost 或您的计算机。

这是通过编辑您的/etc/hosts文件完成的。

然后,您必须配置您的网络服务器,使其根据所要求的服务器名称做出不同的回答,这是通过摆弄 apache 虚拟主机来完成的。

关于这个问题,Marty 的回答相当完整。别忘了sudo service apache2 restart重新加载配置。

另外,您可以将虚拟主机配置粘贴到 pastebin 中吗?

相关内容