Wie deaktiviere ich das Standarddokumentstammverzeichnis in Apache?

13

Ich hoste einige Websites auf meinem Server, auf denen Apache Httpd ausgeführt wird. Jede Website verfügt über eine eigene Domain oder Subdomain und einen virtuellen Host. Daher benötige ich kein Standarddokumentstammverzeichnis. Ist es möglich, DocumentRootin zu deaktivieren /etc/httpd/conf/httpd.conf?

Danijar
quelle

Antworten:

10

Danke für die anderen Antworten. Ich habe es gelöst, indem ich einen virtuellen Standardhost ohne Berechtigungen hinzugefügt habe. Die globalen DocumentRootund ServerNameOptionen müssen mit den im virtuellen Host angegebenen übereinstimmen.

/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>

Auf diese Weise erhalte ich eine 403 Forbidden-Nachricht, wenn über die IP direkt auf den Server zugegriffen wird. Genau das wollte ich. Es wäre sogar noch besser, wenn ich dafür kein /var/www/htmlvorhandenes Verzeichnis benötige , aber Apache beschwert sich, wenn ich /dev/nullstattdessen so etwas wie spezifiziere .

Danijar
quelle
6

Ich bin mir nicht sicher, ob du das machen willst. Wenn in einer Apache-Konfiguration kein Standard-vhost vorhanden ist, wird der erste definierte vhost zum Standard .

Alles, was Sie wirklich tun müssen, ist, dass die Standardeinstellung eine leere Seite bereitstellt.

user9517
quelle
6

Ja und nein.

Sie können die DocumentRootDirektive auskommentieren oder entfernen , kein Problem. Das bringt aber nicht viel, denn dann wird standardmäßig das Standardverzeichnis verwendet, PREFIX/htdocs/in dem PREFIX beim Erstellen von Apache festgelegt ist.

Wenn Sie VirtualHosts eingerichtet haben, werden alle Anforderungen, die nicht von einem explizit konfigurierten virtuellen Host verarbeitet werden, vom Standard-Virtualhost verarbeitet (der normalerweise der erste ist, httpd -SIhnen jedoch mitteilt ).

HBruijn
quelle
1

Jede Apache - Konfigurationsdatei mit der Erweiterung .confbefindet sich innerhalb /etc/httpd/conf.d/als Teil der Apache - Konfiguration enthalten sein. Um die Standardkonfiguration der Begrüßungsseite zu deaktivieren, müssen Sie die Konfiguration umbenennen/etc/httpd/conf.d/welcome.conf:

Schritt eins Verschieben Sie die Standard-Begrüßungsdatei:

sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup 

Schritt 2: Starten Sie den Appache2-Dienst neu

sudo systemctl restart httpd
Usman Ali Maan
quelle
0

In Ihrer /etc/httpd/conf/httpd.conf, wenn Ihre Listen-Direktive lautet

Listen 80

Das ist gemein

*:80

Sie haben in Ihrer /etc/httpd/conf/httpd.conf und /etc/httpd/conf.d/default.conf ein Paar <listener>+ definiert, <servename>die identisch sind: *:80+ <server-ip>. Apache berücksichtigt also nur einen.

Ihre vhost-Konfiguration nützt also nichts.

Ihre Datei /etc/httpd/conf/httpd.conf reicht aus, um den Zugriff auf Ihr Verzeichnis / var / www / html zu blockieren.

Einfach hinzufügen:

<Directory /var/www/html>
    Order Deny,Allow
    Deny from all
    Options None
    AllowOverride None
</Directory>

Bitte lesen Sie https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg :

Wie der Server den richtigen namensbasierten virtuellen Host auswählt

Es ist wichtig zu erkennen, dass der erste Schritt bei der namenbasierten Auflösung virtueller Hosts die IP-basierte Auflösung ist. Die auf Namen basierende virtuelle Hostauflösung wählt erst den am besten geeigneten namenbasierten virtuellen Host aus, nachdem die Kandidaten auf die beste IP-basierte Übereinstimmung eingegrenzt wurden. Die Verwendung eines Platzhalters (*) für die IP-Adresse in allen VirtualHost-Anweisungen macht diese IP-basierte Zuordnung irrelevant.

Wenn eine Anfrage eingeht, findet der Server das beste (spezifischste) Übereinstimmungsargument basierend auf der IP-Adresse und dem Port, die von der Anfrage verwendet werden. Wenn mehr als ein virtueller Host diese Kombination aus Adresse und Port am besten enthält, vergleicht Apache die Anweisungen ServerName und ServerAlias ​​weiter mit dem in der Anforderung enthaltenen Servernamen.

Wenn Sie die ServerName-Direktive auf einem namenbasierten virtuellen Host weglassen, verwendet der Server standardmäßig einen vollqualifizierten Domänennamen (FQDN), der vom Systemhostnamen abgeleitet ist. Dieser implizit festgelegte Servername kann zu einem kontraintuitiven Abgleich des virtuellen Hosts führen und wird nicht empfohlen.

Der standardmäßige namensbasierte vhost für eine IP- und Portkombination Wenn in der Gruppe der virtuellen Hosts, die die spezifischste übereinstimmende Kombination aus IP-Adresse und Port enthalten, kein übereinstimmender Servername oder ServerAlias ​​gefunden wird, wird der erste aufgelistete virtuelle Host verwendet, der übereinstimmt.

Jordan LE NUFF
quelle
0

Ändern Sie einfach den Standardport in:

Listen 80
Listen 8080 # any fake port

und lassen Sie * .80 in VirtualHost

Funktioniert für mich mit Apache2 und Centos 7

Weitere Beispiele finden Sie in der Dokumentation . Schauen Sie sich die Variable _default_ an.

Vasin Yuriy
quelle
0

Um diese Seite zu deaktivieren, müssen wir die Datei /etc/httpd/conf.d/welcome.conf in etwas anderes umbenennen oder Sie können sie einfach löschen, wenn Sie sie nicht benötigen.

mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup

Stellen Sie sicher, dass Apache mit dem folgenden Befehl neu gestartet wird (als Root):

systemctl starte httpd neu

Sukhjinder Singh
quelle