Apache VHost 配置优先级?

Apache VHost 配置优先级?

所以我有 2 个配置文件。

我的站点配置文件

<VirtualHost *:80>
        ServerName      www.mysite.com
        ServerAlias     mysite.com *.mysite.com
        DocumentRoot    /var/www/mysite/www
        ErrorDocument 404 /redirect.php
    ErrorLog    logs/application/mysite.error_log
    CustomLog   logs/application/mysite.access_log Combined
</VirtualHost>

视频上传配置文件

<VirtualHost *:80>
        ServerName      upload.mysite.com
        DocumentRoot    /var/www/videouploader/www
    ErrorLog logs/application/videoupload.error_log
    CustomLog logs/application/videoupload.access_log Combined
</VirtualHost>

你看,我们有大约 50 个可能的 something.mysite.com 子域名,它们都执行不同的操作,但它们都由同一个文档根目录提供服务。

我希望将 *.mysite.com 保留在那里,只是因为它比世界上最长的服务器别名行更干净,而且它可以防止那些试图使用 bananananan.mysite.com 或某些不起作用的东西的白痴。

我已阅读完 Apache 文档,但其中确实没有关于此场景的任何内容。有人知道该怎么做吗?

答案1

Apache 从上到下搜索 vhost 匹配项,并对遇到的第一个匹配项采取行动。如果您将其重命名 videoupload.conf为, 0videoupload.conf它将被读取mysite.conf,并且它应该可以正常工作。

答案2

我遇到了类似的问题。解决方案是从任何其他指令的标头中删除域名<VirtualHost>。删除:

<VirtualHost test.blah.org:443>
ServerName test.blah.org

用。。。来代替:

<VirtualHost *:443>
ServerName test.blah.org

在标头中使用域名会导致 apache 在指令ServerAlias static-*.blah.org下优先匹配该虚拟主机而不是我的虚拟主机<VirtualHost *:443>

答案3

多个文件按字母顺序排列。

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

相关内容