Я настраиваю сервер Apache 2.4.7 на машине Ubuntu 14.04.5 LTS с намерением заменить другой экземпляр. По сути, новый экземпляр представляет собой исходную установку Ubuntu 14.4 с установленным только Apache. Я скопировал и вставил всю свою папку / etc / apache2 со старого компьютера на новый.
Я получаю эту ошибку:
AH00111: переменная конфигурации $ {PORTAL_SERVER} не определена
Есть и другие вопросы об этой ошибке, например вот этот или вот этот. Однако решения или ответы вызывают у меня недоумение, потому что на обеих машинах:
echo $PORTAL_SERVER
дает мне ожидаемую ценностьprintenv
перечисляет переменную среды с ожидаемым значениемТолько на новой машине sudo apachectl -V
выдает ошибку AH00111.
Сервис запускается, но явно не так, как мне хотелось.
sudo apachectl graceful
дает мне то же сообщение, что кажется нормальным. sudo service apache2 restart
делает то же самое.
У меня вопрос: почему пользователь apache не «видит» переменную окружения?
РЕДАКТИРОВАТЬ: вот вся настраиваемая конфигурация (в одном файле conf, включенном в сайтах), где ...
представляют собой множественные ProxyPass
директивы, составляющие остальную часть файла. Стандартные файлы конфигурации Apache не редактировались.
<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>
Вам нужно указать apache, какие системные переменные среды импортировать через PassEnv
, видеть https://httpd.apache.org/docs/2.4/mod/mod_env.html#passenv для документации.
По сути, поместите это перед использованием переменной:
PassEnv PORTAL_SERVER
Остерегайтесь этого sudo
фильтрует, какие переменные среды передаются выполняемой команде, что может объяснить, почему эта переменная не отображается в apache.