编辑:

编辑:

我可以访问运行Linux 的机器。上面安装了Apache2。我需要添加 3 个虚拟主机。

其中/etc/apache2/sites-available,有一组大约 15 个文件显示为ls -la

  1. 有人告诉我 Apache2 会按字母顺序逐一读取这些文件来创建虚拟主机,这是正确的吗?

  2. Linux 在发生冲突时如何给予优先权?最后读取的文件获胜?首先读取文件获胜?

  3. 如果我想配置 3 个虚拟主机(与现有虚拟主机不冲突),是否只需在该目录中创建一个额外的文件即可?

附:我已经和 混在一起availableenabled。人们应该读一读/etc/apache2/enabled。对不起。

答案1

您可能想阅读 Apache2 文档。

有人告诉我 Apache2 会按字母顺序逐一读取这些文件来创建虚拟主机,这是正确的吗?

虚拟主机不是读入的,/etc/apache2/sites-available而是读入的/etc/apache2/sites-enabled。也就是说,apache2 使用 libc,并且根据gnu.org,文件在目录中出现的顺序往往相当随机

编辑:

您可能也想阅读@nwildner 的答案,它比我更准确。

Linux 在发生冲突时如何给予优先权?最后读取的文件获胜?首先读取文件获胜?

确实不确定,但如果存在冲突,通常它会显示一条警告消息,并且您的 httpd 服务将不会(重新)加载。

如果我想配置 3 个虚拟主机(与现有虚拟主机不冲突),是否只需在该目录中创建一个额外的文件即可?

是的,添加额外文件后,运行以下命令:

sudo a2ensite my_site1.conf my_site2.conf my_site3.conf
sudo service apache2 reload

/etc/apache2/sites-available它将搜索my_site1.conf,my_site2.confmy_site3.conf

答案2

回答您的问题很大程度上取决于您使用的发行版。我假设它是基于 Debian 的,因为他们使用这种方法和sites-available目录sites-enabled以及/etc/apache2配置目录,而不是/etc/httpd像基于 RPM 的发行版。

回答1。那是对的。您可以Include在文件中看到该指令apache2.conf

host:/etc/apache2# grep sites apache2.conf
Include /etc/apache2/sites-enabled/

查看 Apache Include 指令文档:

... Shell 样式 (fnmatch()) 通配符可以在路径的文件名或目录部分中使用,以一次包含多个文件,按字母顺序。 ...

回答2。不确定会发生什么。我有目的地在我的 Apache 服务器上复制了 VirtualHost,但它没有抱怨。不确定第一个或最后一个配置是否设置为有效。

编辑1:似乎 CentOS Apache 使用VirtualHost配置的第一个条目,当我将 2 个相同的 VirtualHost 放入其中时,/etc/httpd/conf.d/virtual_host.conf仅更改DocumentRoot.配置示例:

<VirtualHost ip.address.A:80>
  DocumentRoot /var/www/sites/wpad
  ServerName wpad.xxx.net
  ServerAlias wpad.xxx.net wpad
</VirtualHost>

<VirtualHost ip.address.A:80>
  DocumentRoot /var/www/sites/wpad2
  ServerName wpad.xxx.net
  ServerAlias wpad.xxx.net wpad
</VirtualHost>

当我在隐身/私人浏览器模式下浏览时,我得到第wpad.xxx.net/wpad.dat一个virtualhost. Apache 日志中未发现错误。

回答3。在基于 Debian 的发行版上,您必须在内部创建文件sites-available并将其符号链接到sites-enabled

cd /etc/apache2/sites-available/
ln -s your-site ../sites-enabled/

或者,您可以a2ensite按照@Sw0ut 的解释使用

相关内容