如何正确使用 Apache 的 mod_env 模块来修改 PATH?



我有一堆以这个 shebang 行开头的 python 脚本:

#!/usr/bin/env python3

尝试在命令行运行脚本时,所有脚本都按预期工作。 使用 Apache 时,我收到"内部服务器错误"消息。 检查错误日志时,Apache 报告:env: python3: No such file or directory.

起初我认为这可能与 env 命令有关。 但是,使用 perl 脚本和这个 shebang 行:

#!/usr/bin/env perl工作正常!

我相信这可能是由于 Apache 中 PATH 的设置方式。 当我使用工作的perl脚本输出Apache的环境时,PATH被报告为/usr/bin:/bin:/usr/sbin:/sbin。 在我的机器上,envperl都列在/usr/bin中,但python3位于/usr/local/bin,它不包含在 Apache 的路径中,如上所示。

我想我需要在 Apache 的 PATH 中添加/usr/local/bin,并且已经尝试使用SetEnvPassEnv PATH,如 Apache 的文档中所述:

https://httpd.apache.org/docs/2.4/mod/mod_env.html

但是,随着问题持续存在,这些似乎没有任何影响。

我做错了什么?

PS - 当我将 shebang 行更改为#!/usr/local/bin/python3脚本按预期运行时。但是,出于可移植性目的,我想保留env方法。

更新:虽然我无法使SetEnvPassEnv指令正常工作,但我设法通过修改 Apache 的envvars文件来获得所需的行为:

export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"

然后重新启动 Apache 服务。

envvars文件的位置可能因安装/分发而异,但您可以通过检查apachectl脚本找到它的位置,该脚本包含引用envvars文件的行。

在我的系统上,它处于/etc/apache2/envvars.

相关内容

最新更新