Apache httpd.conf User/Group Setting
我有一个包含以下内容的 httpd.conf 文件:
1 2 3 4 5 6 7 8 9 10 | <IfModule unixd_module> <If"env('OS') == 'Darwin'"> User daemon Group admin </If> <Else> User www Group scm </Else> </IfModule> |
我正在尝试将我在 OSX 上的开发环境中的 httpd 实例的用户 ID 设置为一个用户,但在将其部署到 Ubuntu 时设置为另一个用户。我收到一条语法错误消息:
1 2 | 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=
我终于找到时间更深入地检查它,这是因为 Override 行为。我已经简要检查了 2.4.4 源代码,在我看来,基本上只有当前目录或位置上下文中"覆盖"列表中的指令可以用 If/Else 覆盖。
因为"用户"和"组"应该为整个安装设置一次,而不是被".htaccess"修改或取决于目录/位置上下文,因此它们不在某些默认的"AllowOverride"上列表,并且您不能简单地将其放入这样的上下文中以使其可覆盖。不过,强制用户/组选项仅在 apache 内部"配置树"之上有效是有道理的。
要以合理的方式实现您需要的行为,正如我在评论中简短解释的那样,您应该使用"envvars"机制,默认情况下在 Debian(可能 Ubuntu 也可能)中可用。
简而言之,有 /etc/apache2/envvars 文件包含例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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)中可以使用以下部分
1 2 | User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} |
对 /etc/apache2/envvars 的简单修改将让你得到你需要的东西。您还可以在 OSX 上使用的用户/组的编译设置中更改用户/组的一些默认值,并仅在 Ubuntu 端使用脚本。