我正在一台 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 中看不到这个变量。