Я настраиваю совершенно новый сервер — я буквально только что запустил экземпляр AWS EC2, заново установил apache и mod_ssl и получил самые простые конфигурации. Apache, по-видимому, игнорирует любую конфигурацию аутентификации (включая Логуровень) в Виртуальный хост блоки.
Это с Apache 2.4.51 на amzn2.x86_64 Linux.
Я начал с перенаправления HTTP на HTTPS, а затем следовал основным инструкциям для Аутентификация и авторизация Apache 2.4. Это привело меня к следующему файлу virtual.conf:
<VirtualHost _default_:80>
DocumentRoot /var/www/html
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^(localhost|127.0.0.1)
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
LogLevel debug
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Directory "/var/www/html">
AllowOverride All
Options Indexes FollowSymLinks
AuthType Basic
AuthName "Restricted Files"
# (Following line optional)
AuthBasicProvider file
AuthUserFile "/mount/local/apache/passwd/passwords"
Require user someuser
</Directory>
DocumentRoot /var/www/html
</VirtualHost>
В целом, вышеописанное работает, за исключением авторизации. Если я перехожу на свой IP-адрес в веб-браузере, он правильно перенаправляет на 443, он обслуживает сертификаты по указанному (нестандартному) пути, и я вижу, что он регистрируется отлаживать уровень активности, по крайней мере, для mod_ssl. Однако он просто обслуживает этот index.html из /var/www/html/ (NB: /var/www/html является символической ссылкой).
я нашел этот другой вопрос, что заставило меня искать любой Требовать все предоставленные директивы.
# пароль
/etc/httpd/conf.d
# grep Требовать * 2>/dev/null
autoindex.conf:# Необходимые модули: mod_authz_core, mod_authz_host,
autoindex.conf: Требовать все предоставленные
ssl.conf:# С помощью SSLRequire вы можете управлять доступом к каталогу на основе
ssl.conf:#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
ssl.conf:# или StrictRequire:
ssl.conf:# Отказывает в доступе, даже если применяется «SSLRequireSSL» или «SSLRequire».
ssl.conf:#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
userdir.conf: Требовать метод GET POST OPTIONS
virtual.conf: Требовать пользователя someuser
welcome.conf: Требовать все предоставленные
Тот, что в autoindex.conf находится внутри <Directory "/usr/share/httpd/icons"> блок, а тот, что в добро пожаловать.conf в <Directory /usr/share/httpd/noindex>. я сделал найти один в /etc/httpd/conf/http.conf:
# Дальнейшее ослабление доступа к корневому каталогу документа по умолчанию:
<Каталог "/var/www/html">
Индексы опционов FollowSymLinks
Аллововеррайд
Требовать все предоставленные
</Каталог>
Обратите внимание, что в этой установке (через ням на Amazon Linux 2) основной файл конфигурации /etc/httpd/conf/http.conf. Последняя строка этого файла IncludeOptional conf.d/*.conf. Моя основная конфигурация, которую я разместил выше, находится в /etc/httpd/conf.d/virtual.conf.
Я пытался это закомментировать Требовать все предоставленные и перезапустил сервер, но без изменений. Вот тогда я заметил, что он вообще ничего не делает. Этот ранее упомянутый вопрос показал некоторые записи в его файле журнала. Однако даже
хотя у меня есть Отладка на уровне журнала, я не вижу ничего связанного с authz_core в лог-файлах, как он был. ¯_(ã)_/¯
На этом этапе я попробовал ряд модификаций внутри <VirtualHost> блокировать:
- Я пытался обернуть строки
Основной тип авторизации через Требовать пользователя в <RequireAll> блокировать
- я пытался добавить
Требовать все отказано перед Требовать пользователя
- Я попытался использовать
.htaccess файл с той же конфигурацией
- Я попытался изменить
Разрешить переопределить все к AllowOverride All AuthConfig и используя .htaccess файл
- Я попытался расширить ведение журнала до
Отладка LogLevel auth_basic:trace1 authz_core:trace1
Во всех случаях никаких изменений, и конфигурация анализируется нормально. Сервер просто обслуживает страницу, и ни в одном из файлов журнала ничего нет.
Однако, если я внесу изменения в основной conf/httpd.conf файл внутри <Directory "/var/www/html"> блок, все работает как положено:
- изменение
Требовать все предоставленные к Требовать все отказано (вместо комментирования) блокирует весь доступ
- изменение
AllowOverride нет к Аллововеррайд Аутконфиг делает мой .htaccess файл с той же конфигурацией авторизации, что и в файле <VirtualHost> block работает как положено — запрашивает имя пользователя и пароль
- регистрация с
Отладка LogLevel auth_basic:trace1 authz_core:trace1 получает много журналов
Итак, подводя итог, хотя мой <VirtualHost> config в целом работает (перенаправление, SSL, отладка для всего, кроме аутентификации), похоже, он молча игнорирует любые авторизация конфигурация, в том числе Логуровень.
В краткосрочной перспективе я решил свою проблему, отменив все изменения, которые я сделал в основном файле конфигурации, чтобы они не переопределялись во время обновления программного обеспечения, и поместил их в conf/00-override.conf:
<Directory "/var/www/html">
AllowOverride All
AuthType Basic
AuthName "Restricted Files"
# (Following line optional)
AuthBasicProvider file
AuthUserFile "/mount/local/apache/passwd/passwords"
Require user someuser
</Directory>
Однако было бы неплохо иметь возможность настроить авторизацию на уровне виртуального хоста. Любые идеи?