我有一个很大的 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 文件中——您可以使用这种方法。