您可以使用IfDefine启用或禁用某些配置,但这可能无法满足您的要求。相反,您可以在Apache初始化脚本中设置环境变量以在配置中进行访问。例如,添加:
HOSTNAME=$(hostname)
到RHEL机器上的/etc/init.d/httpd
(在调用httpd
!的行之前)将机器的主机名作为变量传递。它不必是命令的输出-在启动的环境中设置变量的任何东西httpd
都可以。可以在配置中使用变量,如下所示:
[root@dev ~]# cat /etc/httpd/conf.d/test.conf
Header set X-Hostname ${HOSTNAME}
[root@dev ~]# GET -Sed http://localhost
GET http://localhost --> 200 OK
Connection: close
Date: Fri, 11 Sep 2009 20:47:13 GMT
Server: Apache/2.2.3 (Red Hat)
Content-Length: 525
Content-Type: text/html;charset=ISO-8859-1
Client-Date: Fri, 11 Sep 2009 20:47:13 GMT
Client-Peer: 127.0.0.1:80
Client-Response-Num: 1
Title: Index of /
X-Hostname: dev.local
当然,您不限于该Header
指令。变量可以在任何地方使用,例如,<Directory ${FOO}>
等等。
如果您不喜欢这种方法(效果不是很好),则可以使用m4或其他某种模板语言从模板生成配置。
其他:
Hrm,一种更好的方法是将所有变量存储在外部文件中,也许/etc/httpd/conf/variables.txt
:
FOO=/path/to/dir
ROLE=development
然后使用以下命令将它们包含到您的Apache init.d
脚本中:
. /etc/httpd/conf/variables
打电话之前httpd
。仍然不够出色,但是至少它将启动脚本和变量分开了。