我可以访问运行Linux 的机器。上面安装了Apache2。我需要添加 3 个虚拟主机。
其中/etc/apache2/sites-available
,有一组大约 15 个文件显示为ls -la
。
有人告诉我 Apache2 会按字母顺序逐一读取这些文件来创建虚拟主机,这是正确的吗?
Linux 在发生冲突时如何给予优先权?最后读取的文件获胜?首先读取文件获胜?
如果我想配置 3 个虚拟主机(与现有虚拟主机不冲突),是否只需在该目录中创建一个额外的文件即可?
附:我已经和 混在一起available
了enabled
。人们应该读一读/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.conf
和my_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 的解释使用