Apache HTTP 服务器版本 2.2 中的包含文件 httpd.conf

Apache HTTP 服务器版本 2.2 中的包含文件 httpd.conf

我有一个很大的 httpd.conf 文件,其中大部分是虚拟主机。有没有办法创建一个文件,比如 virtual_hosts.conf,并从 httpd.conf 中包含它?我在 Google 上搜索了一下,但似乎找不到太多关于包含的内容,只有模块加载。

答案1

有关 apache httpd.conf 文件的信息可以在以下位置找到这里

我们从该网站复制了一些片段,以确保链接弃用后信息不会丢失:

Include /usr/local/apache2/conf/ssl.conf
Include /usr/local/apache2/conf/vhosts/*.conf

相对路径:

Include conf/ssl.conf
Include conf/vhosts/*.conf

通配符:

Include conf/vhosts/*/*.conf

答案2

我将每个虚拟主机分离到其自己的 vhost 配置文件中,这样您就不必搜索庞大的文档来寻找一个小指令。与 Quanta 的帖子类似:

Include /etc/apache2/vhosts.d/*.conf

只需将其放在 httpd.conf 的最后一行即可

然后只需将您的单个 vhosts.conf 拆分为每个域的单独文件,即

domain1.conf
domain2.conf
domain3.conf
etc.... 

更容易管理。 -sean

答案3

你可以这样做包括指示:

Include /path/to/virtual_hosts.conf

答案4

包括可选

您也可以使用包括可选指示

IncludeOptional conf/vhosts/*.conf

因此在这种情况下可能没有任何合适的文件。或者正如文档中所说,

它的工作原理与 Include 指令相同,但如果使用通配符并且它们与任何文件或目录不匹配,或者文件系统中不存在文件路径,它将被默默忽略(而不是导致错误)。

但!

请注意,某些版本的 Apache 确实无法启动在“文件系统中不存在文件路径”的情况下。如上例中没有目录的情况conf/vhosts/

因此,在出现这样的问题时,当您不确定某些子目录是否存在时,您可能无法安全使用此指令。

就像这样的方式:

<VirtualHost *:80>

DocumentRoot    "/var/www/example.com"
ServerName      "example.com"
ServerAlias     "www.example.com" "example.com" 
...

IncludeOptional /var/www/example.com/*.httpd.conf

</VirtualHost>



<VirtualHost *:80>

DocumentRoot    "/var/www/other.org"
ServerName      "other.org"
ServerAlias     "www.other.org" "other.org" 
...

IncludeOptional /var/www/other.org/*.httpd.conf

</VirtualHost>

当一些人喜欢

IncludeOptional /var/www/other.org/*.httpd.conf

将要效果很好(您是否有任何文件与给定的掩码匹配),但是

IncludeOptional /var/www/other.org/config_optional_subdir/*.conf

将失败如果没有这样的子目录config_optional_subdir

注意

IncludeOptional /var/www/other.org/extra.httpd.conf

将失败如果至少有一个网站没有确切地指定文件extra.httpd.conf。通配符是关键。


因此,如果常见的站点配置创建并可自动重新创建一些模板,但一些具体的站点需要额外的 apache 配置,而这些配置不能只写在 .htaccess 文件中——您可以使用这种方法。

相关内容