当系统环境变量已定义时,如何诊断“AH00111:未定义配置变量”

当系统环境变量已定义时,如何诊断“AH00111:未定义配置变量”

我正在一台 Ubuntu 14.04.5 LTS 机器上设置一个 Apache 2.4.7 服务器,目的是替换另一个实例。基本上,新实例是一个原始的 Ubuntu 14.4 安装,只安装了 Apache。我已将整个 /etc/apache2 文件夹从旧机器复制并粘贴到新机器上。

我收到此错误:

AH00111:配置变量 ${PORTAL_SERVER} 未定义

关于此错误还有其他问题,例如这个或者这个。但是,解决方案或答案让我感到困惑,因为在两台机器上:

  • PORTAL_SERVER 在 /etc/environment 中定义
  • echo $PORTAL_SERVER给了我预期值
  • printenv列出具有预期值的环境变量
  • /etc/apache2 的内容完全相同,特别是 /etc/apache2/envvars 的内容。

只是,在新机器上,sudo apachectl -V出现了 AH00111 错误。

服务启动了,但显然不是我想要的那样。

sudo apachectl graceful给我同样的消息,感觉很正常。sudo service apache2 restart效果也一样。

我的问题是为什么 apache 用户“看不到”环境变量?

编辑:这是整个自定义配置(在 sites-enabled 中启用的单个 conf 文件中),其中代表构成文件其余部分的...多个指令。标准 Apache 配置文件未经编辑。ProxyPass

<VirtualHost *:443>
        # This virtual host will answer requests on port 443 (https) for the domain defined hereafter
        # NOTE: The PORTAL_SERVER environment variable is defined in /etc/environment.
        ServerName ${PORTAL_SERVER}

        # Define error page 503 (site under maintenance) : reached when a server doesn't answer ajp requests
        DocumentRoot /var/www
        Alias "/errors" "/var/www/errors"
        <Directory  "/var/www/errors/">
                Options FollowSymLinks MultiViews
                order deny,allow
                allow from all
        </Directory>
        ErrorDocument 503 /errors/error-503.html

        # Redirect https://${PORTAL_SERVER}/ on https://${PORTAL_SERVER}/portal/
        Redirect /index.html https://${PORTAL_SERVER}/portal/

        # Activate SSL and define certificat
        SSLEngine on
        SSLProtocol all
        SSLCertificateFile    /etc/ssl/certs/ssl_certificate.crt
        SSLCertificateKeyFile /etc/ssl/private/ssl_server.key
        SSLCertificateChainFile /etc/ssl/certs/IntermediateCA.crt

        # Configure mod_proxy
        ProxyRequests Off
        ProxyPreserveHost Off
        # Default timeout before ajp requests are considered as timed out
        ProxyTimeout 10

        ...
        ...

</VirtualHost>

答案1

您需要告诉 apache 通过哪些系统环境变量导入PassEnv,请参阅https://httpd.apache.org/docs/2.4/mod/mod_env.html#passenv用于文档。

基本上,在使用变量之前放置这个:

PassEnv PORTAL_SERVER

请注意,sudo过滤器会将哪些环境变量传递给正在运行的命令,这也许可以解释为什么在 apache 中看不到这个变量。

相关内容