Risposte:
Grazie per le altre risposte. L'ho risolto aggiungendo un host virtuale predefinito senza alcuna autorizzazione. Il globale DocumentRoot
e le ServerName
opzioni devono corrispondere a quelli specificati nell'host virtuale.
/etc/httpd/conf/httpd.conf
...
ServerName <server-ip>:80
DocumentRoot "/var/www/html"
<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
...
/etc/httpd/conf.d/default.conf
<VirtualHost *:80>
ServerName <server-ip>
DocumentRoot /var/www/html
</VirtualHost>
In questo modo, ricevo un messaggio 403 Proibito quando si accede direttamente al server dal suo ip, che è esattamente quello che volevo. Sarebbe ancora meglio se non avessi bisogno di /var/www/html
una directory esistente per questo, ma Apache si lamenta se /dev/null
invece specifico qualcosa del genere .
Non sono sicuro che tu voglia farlo. Se non esiste un vhost predefinito in una configurazione di apache, il primo vhost definito diventa quello predefinito .
Tutto quello che devi fare è avere la pagina predefinita come servizio vuoto.
Sì e no.
Puoi commentare o rimuovere la DocumentRoot
direttiva, nessun problema. Ma questo non ottiene molto, perché allora verrà automaticamente PREFIX/htdocs/
impostata la directory predefinita in cui PREFIX è impostato quando si crea apache.
Quando hai VirtualHosts impostato tutte le richieste che non sono gestite da un host virtuale configurato in modo esplicito vengono gestite dall'host virtuale predefinito (che in genere è il primo, ma te httpd -S
lo dirà).
Qualsiasi file di configurazione di Apache con estensione .conf
all'interno /etc/httpd/conf.d/
sarà incluso come parte della configurazione di Apache. Pertanto, per disabilitare la configurazione predefinita della pagina "Benvenuti", è necessario rinominarla/etc/httpd/conf.d/welcome.conf:
Passo uno spostare il file di benvenuto predefinito:
sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup
Passaggio 2: riavviare il servizio Appache2
sudo systemctl restart httpd
Nel tuo /etc/httpd/conf/httpd.conf, se la tua direttiva Listen è
Listen 80
Questo è cattivo
*:80
Hai definito una coppia <listener>
+ <servename>
in /etc/httpd/conf/httpd.conf e /etc/httpd/conf.d/default.conf che sono uguali: *:80
+ <server-ip>
. Quindi, Apache ne tiene conto solo di uno.
Quindi, la configurazione del tuo vhost è inutile.
Il tuo /etc/httpd/conf/httpd.conf è sufficiente per bloccare l'accesso alla tua directory / var / www / html.
Aggiungi semplicemente:
<Directory /var/www/html>
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
Si prega di leggere a https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg :
Come il server seleziona l'host virtuale basato sul nome corretto
È importante riconoscere che il primo passo nella risoluzione dell'host virtuale basato sul nome è la risoluzione basata su IP. La risoluzione host virtuale basata sul nome sceglie l'host virtuale basato sul nome più appropriato solo dopo aver ristretto i candidati alla migliore corrispondenza basata su IP. L'uso di un carattere jolly (*) per l'indirizzo IP in tutte le direttive VirtualHost rende irrilevante questa mappatura basata su IP.
Quando arriva una richiesta, il server troverà l'argomento di corrispondenza migliore (più specifico) in base all'indirizzo IP e alla porta utilizzati dalla richiesta. Se esiste più di un host virtuale contenente questa combinazione di indirizzo e porta con la migliore corrispondenza, Apache confronterà ulteriormente le direttive ServerName e ServerAlias con il nome del server presente nella richiesta.
Se si omette la direttiva ServerName da qualsiasi host virtuale basato su nome, il server passerà automaticamente a un nome di dominio completo (FQDN) derivato dal nome host di sistema. Questo nome del server impostato in modo implicito può portare a una corrispondenza host virtuale non intuitiva ed è scoraggiato.
Il vhost predefinito basato sul nome per una combinazione di porta e IP Se non viene trovato ServerName o ServerAlias corrispondenti nel set di host virtuali che contengono la combinazione di porta e indirizzo IP corrispondente più specifica, quindi il primo host virtuale elencato che corrisponde a quello che verrà utilizzato.
Cambia la porta predefinita in:
Listen 80
Listen 8080 # any fake port
e lascia * .80 in VirtualHost
Funziona per me con Apache2 e Centos 7
Altri esempi che puoi trovare nella documentazione . Dai un'occhiata alla variabile _default_.
Per disabilitare questa pagina, dobbiamo rinominare il file /etc/httpd/conf.d/welcome.conf in qualcos'altro o puoi semplicemente cancellarlo se non ti serve.
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup
Assicurati che Apache sia riavviato (come root) con il comando:
systemctl restart httpd