是否可以在 Apache 配置文件中使用变量?
例如,当我使用 Django+WSGI 设置站点时,配置文件可能如下所示:
<Directory /path/to/foo/>
Order allow,deny
Allow from all
</Directory>
Alias /foo/static /path/to/foo/static
WSGIScriptAlias /foo /path/to/foo/run_wsgi
我想把'/path/to/foo'变成一个变量,所以它只需要在一个地方定义。就像是:
Variable FOO /path/to/foo
…
谢谢!
您可以使用mod_macro ,它自2.4 版以来已包含在 Apache httpd 中
在此之前它必须单独安装,请参阅mod_macro。例如在 Debian 上:
apt-get install libapache2-mod-macro; a2enmod macro
.示例配置
/etc/apache2/conf.d/vhost.macro
/etc/apache2/sites-available/vhost.mysite.com
使用
Define
关键字要简单得多。请参阅定义指令。...
您可以使用IfDefine启用或禁用配置位,但这可能不会满足您的要求。相反,您可以在 Apache 初始化脚本中设置环境变量以在配置中访问。例如,添加:
to
/etc/init.d/httpd
(在调用httpd
! 的行之前)在 RHEL 机器上将机器的主机名作为变量传递。它不一定是命令的输出——在启动的环境中设置变量的任何东西都httpd
可以。变量可以像这样在配置中使用:当然,您不限于
Header
指令。变量可以在任何地方使用,例如<Directory ${FOO}>
等。如果您不喜欢这个(而且它不是那么好..),您可以使用m4或其他模板语言从模板生成配置。
附加:
Hrm,使其更好的一种方法是将所有变量存储在外部文件中,也许
/etc/httpd/conf/variables.txt
:然后将这些包含到您的 Apache
init.d
脚本中:打电话之前
httpd
。仍然不是很出色,但至少它将启动脚本和变量分开。您可以将系统环境变量与 mod_env 和 PassEnv 指令一起使用。 看这里
Debian 示例:
将你的变量添加到 /etc/apache2/envvars (这个文件被 apache2ctl 用来定义变量)
将您的变量传递到 apache 配置中
然后,您可以访问系统环境变量,就像它是 apache 变量一样。
我遇到了同样的问题,经过一些研究,完全为我解决了它的 Apache 2.x 解决方案(仅此而已)是这样的:
http://people.apache.org/~rjung/mod_define/
请注意,解压后您应该像这样构建它(文档的安装部分似乎忘记遵守 apache2?):
然后创建
/etc/apache2/mods-available/define.load
:之后,
a2enmod
像往常一样启用模块。上面链接中的文档显示了如何使用它。现在您可以非常简单地定义并直接使用它,所有这些都在同一个 apache2 配置中。
令人难以置信,但在 centos 6.4 上的 httpd 2.2 上这有效
在 /etc/sysconfig/httpd 中导出环境变量
然后只需执行此操作...
然后终于....
您可能想查看mod_passenger for apache,它也可以托管 django 应用程序。我们使用它取得了巨大的成功。您在虚拟主机中需要做的就是,嗯,什么都没有。您唯一需要做的就是在应用程序根目录中创建一个“公共”目录,并在“公共”中创建指向您的静态目录(如“媒体”)的符号链接(这将提高静态服务性能)并将您的 DocumentRoot 指向它。
然后将以下文件放在“public/../passenger_wsgi.py”中:
启动您的浏览器:它有效!