Configurez un server nou-nouț â tocmai am creat o instanță AWS EC2, am făcut o nouă instalare a apache și mod_ssl și am aproape cea mai simplă dintre configurații. Apache pare să ignore orice configurație de autentificare (inclusiv LogLevel
) în VirtualHost
blocuri.
Aceasta este cu Apache 2.4.51 pe amzn2.x86_64 Linux.
Am început prin a redirecționa HTTP către HTTPS, apoi am urmat instrucțiunile de bază pentru Apache 2.4 Autentificare și autorizare. Asta m-a dus la următorul 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>
În general, cele de mai sus pare să funcționeze, cu excepția chestiilor de autentificare. Dacă merg la adresa mea IP într-un browser web, redirecționează corect la 443, servește certificatele din calea specificată (non-standard) și o pot vedea înregistrând depanare
nivel de activitate, cel puțin pentru mod_ssl. Cu toate acestea, servește doar acest index.html de la /var/www/html/
(NB: /var/www/html
este o legătură simbolică).
am găsit aceasta alta intrebare, ceea ce m-a determinat să caut oricare Solicitați toate acordate
directive.
# pwd
/etc/httpd/conf.d
# grep Necesită * 2>/dev/null
autoindex.conf:# Module necesare: mod_authz_core, mod_authz_host,
autoindex.conf: Solicită toate acordate
ssl.conf:# Cu SSLRequire puteți face controlul accesului pe director
ssl.conf:#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
ssl.conf:# o StrictRequire:
ssl.conf:# Acest lucru interzice accesul atunci când „SSLRequireSSL” sau „SSLRequire” este aplicat chiar și
ssl.conf:#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
userdir.conf: Necesită metoda GET POST OPTIONS
virtual.conf: Solicita utilizatorului un utilizator
welcome.conf: Solicită toate acordate
Cel din autoindex.conf
este în interiorul unui <Directory "/usr/share/httpd/icons">
bloc, iar cel din bun venit.conf
este in <Directory /usr/share/httpd/noindex>
. eu făcut gasesti unul in /etc/httpd/conf/http.conf
:
# Relaxați și mai mult accesul la rădăcina implicită a documentului:
<Directorul „/var/www/html”>
Opțiuni Indexuri FollowSymLinks
AllowOverride Nici unul
Solicitați toate acordate
</Director>
Rețineți, la această instalare (via yum
pe Amazon Linux 2), fișierul de configurare principal este /etc/httpd/conf/http.conf
. Ultima linie a acelui fișier este IncludeOpțional conf.d/*.conf
. Configurația mea principală pe care am postat-o mai sus este în /etc/httpd/conf.d/virtual.conf
.
Am încercat să comentez asta Solicitați toate acordate
și a repornit serverul, dar nicio modificare. Atunci am observat că nu pare să facă nimic. Întrebarea menționată anterior a arătat câteva intrări în fișierul său jurnal. Cu toate acestea, chiar și
deși am Depanare LogLevel
, nu văd nimic legat de authz_core
în fișierele jurnal, așa cum era el. ¯_(ã)_/¯
În acest moment, am încercat o serie de modificări în interiorul <VirtualHost>
bloc:
- Am încercat să împachetez liniile
AuthType de bază
prin Solicitați utilizatorului un utilizator
într-o <RequireAll>
bloc
- Am incercat sa adaug
Solicitați refuzul tuturor
inainte de Solicitați utilizator
- Am încercat să folosesc un
.htaccess
fișier cu aceeași configurație
- Am încercat să schimb
AllowOverride All
la AllowOverride All AuthConfig
și folosind a .htaccess
fişier
- Am încercat să extind logarea la
LogLevel depanare auth_basic:trace1 authz_core:trace1
În toate cazurile, nicio modificare, iar configurația se analizează bine. Serverul doar servește pagina și nu există nimic în niciunul dintre fișierele jurnal.
in orice caz, dacă fac modificări în principal conf/httpd.conf
fișier în interiorul <Directory "/var/www/html">
bloc, lucrurile funcționează conform așteptărilor:
- schimbându-se
Solicitați toate acordate
la Solicitați refuzul tuturor
(în loc să-l comentați) blochează accesul
- schimbându-se
AllowOverride nici unul
la AllowOverride AuthConfig
face al meu .htaccess
fișier cu aceeași configurație de autentificare ca în fișierul <VirtualHost>
blochează funcționarea conform așteptărilor â solicită numele de utilizator și parola
- apărând logare cu
LogLevel depanare auth_basic:trace1 authz_core:trace1
îmi aduce o mulțime de jurnalism
Deci, pentru a rezuma, chiar dacă al meu <VirtualHost>
config funcționează în general (redirecționare, SSL, depanare pentru orice, cu excepția auth), pare să ignore în tăcere orice auth
configurație, inclusiv LogLevel
.
Pe termen scurt, mi-am rezolvat problema anulând toate modificările făcute în fișierul de configurare principal, astfel încât lucrurile să nu fie depășite în timpul unei actualizări de software și le-am introdus în 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>
Totuși, ar fi bine să poți configura autorizarea la nivel de gazdă virtuală. Vreo idee?