我需要多个唯一的域名,它们都链接到我电脑的本地 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 中吗?