gpt4 book ai didi

Apache httpd.conf 用户/组设置

转载 作者:行者123 更新时间:2023-12-02 06:05:09 26 4
gpt4 key购买 nike

我有一个 httpd.conf 文件,其中包含以下内容:

<IfModule unixd_module>
<If "env('OS') == 'Darwin'">
User daemon
Group admin
</If>
<Else>
User www
Group scm
</Else>
</IfModule>

我想要做的是将 OSX 上的开发环境中的 httpd 实例的用户 ID 设置为一个用户,但在部署到 Ubuntu 时将其设置为另一个用户。我收到语法错误消息:

AH00526: Syntax error on line 32 of /usr/local/apps/apache2/conf/httpd.conf:
User not allowed here

我查看了If指令,这里是允许的。如果我注释掉用户/组,我不会收到语法错误。如果没有 IF/Else,并且仅使用一个用户,则此方法有效。如果我尝试对用户/组使用该条件,我会收到错误。这在 httpd.conf 中可能吗?如果是这样,那又如何呢?有不同的方法来完成同样的事情吗? “OS”环境变量在每个环境中通过“export OS=uname”设置。这是 Apache httpd 2.4.4 中的内容。

最佳答案

我终于找到时间更深入地检查它,这是因为 Override 行为。我简要检查了 2.4.4 源代码,在我看来,基本上只有当前目录或位置上下文中“覆盖”列表中的指令才可以用 If/Else 覆盖。

由于“用户”和“组”应该在整个安装过程中设置一次,并且不能通过“.htaccess”或根据目录/位置上下文进行修改,因此它们不在某些默认的“AllowOverride”上列表,并且您不能简单地将其放入这样的上下文中以使它们可被覆盖。不过,强制用户/组选项仅在 apache 内部“配置树”之上有效是有道理的。

为了以合理的方式实现您需要的行为,正如我在评论中简短解释的那样,您应该使用“envvars”机制,该机制在 Debian 中默认可用(也可能是 Ubuntu)。

简而言之,/etc/apache2/envvars 文件包含例如

unset HOME
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
SUFFIX=
fi
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
export LANG=C
export LANG

它是由/etc/init.d/apache2 启动脚本获取/继承的,因此在 httpd 主配置文件(例如 apache2.conf)中可以使用以下部分

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

简单修改/etc/apache2/envvars 就可以让你得到你需要的东西。您还可以在 OSX 上使用的用户/组的编译设置中更改用户/组的一些默认值,并仅在 Ubuntu 端使用该脚本。

关于Apache httpd.conf 用户/组设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com