An Adressen und Ports binden - Apache HTTP Server Version 2.4

Apache HTTP Server Version 2.4

Apache > HTTP-Server > Dokumentation > Version 2.4

# An Adressen und Ports binden

Verfügbare Sprachen: de | en | fr | ja | ko | tr

Diese Übersetzung ist möglicherweise nicht mehr aktuell. Bitte prüfen Sie die englische Version auf die neuesten Änderungen.

Konfiguration der vom Apache HTTP Server verwendeten Adressen und Ports.

### Siehe auch

- Virtuelle Hosts
- Probleme bezüglich DNS und Apache
- Kommentare

## Überblick

Referenzierte Module | Referenzierte Direktiven
--- | ---
`core` `mpm_common` | `<VirtualHost>` `Listen`

Beim Start bindet sich der httpd an bestimmte Adressen und Ports der lokalen Maschine und wartet auf eingehende Anfragen. Standardmäßig lauscht er an allen Adressen des Systems. Es kann jeodch notwendig sein, ihm mit zuteilen, nur an bestimmten Ports zu lauschen oder nur an ausgewählten Adressen, bzw. einer Kombination aus beidem. Dies wird oft mit der Funktionalität virtueller Hosts kombiniert, die bestimmt, wie der `httpd` auf verschiedene IP-Adressen, Hostnamen und Ports reagiert.

Die Direktive `Listen` weist den Server an, eingehende Anfragen nur an bestimmten Port(s) oder Adress/Port-Kombinationen zu akzeptieren. Wenn bei der `Listen`-Direktive nur eine Portnummer angegeben wird, dann lauscht der Server auf allen Netzwerkinterfaces an dem angegebenen Port. Ist auch eine IP-Adresse angegeben, dann lauscht der Server an der angegebenen Schnittstelle auf dem angegebenen Port. Es können mehrere `Listen`-Anweisungen verwendet werden, um eine Reihe von Adressen und Ports anzugeben, an denen gelauscht werden soll. Der Server wird dann auf Anfragen an jeder der abgehörten Adressen und Ports antworten.

Um beispielsweise den Server zu veranlassen, auf allen Netzwerkinterfaces sowohl an Port 80, als auch an Port 8000 Verbindungen zu akzeptieren, geben Sie an:

    Listen 80
    Listen 8000

Um den Server Verbindungen an Port 80 auf einem Netzwerkinterface akzeptieren zu lassen und an Port 8080 auf einem anderen Interface, geben Sie an:

    Listen 192.0.2.1:80
    Listen 192.0.2.5:8000

IPv6-Adressen müssen wie im folgenden Beispiel in eckigen Klammern angegeben werden:

    Listen [2001:db8::a00:20ff:fea7:ccea]:80

Sich überlappende `Listen`-Direktiven generieren einen fatalen Fehler, der verhindert, dass der Server hochfährt.

`(48)Address already in use: make_sock: could not bind to address [::]:80`

Diese Diskussion im Wiki gibt weitere Tipps zur Fehlerbehebung.

## Änderung der Listen-Konfiguration beim Neustart

Wenn der httpd neu gestartet wird, müssen Änderungen an `Listen`-Direktiven besonders beachtet werden. Während eines Neustarts bleiben die Ports an den httpd gebunden (wie in der ursprünglichen Konfiguration), um "Connection refused"-Fehler für neue Verbindungsversuche zum Server zu vermeiden. Wenn Änderungen an den verwendeten `Listen`-Direktiven vorgenommen werden, die mit der alten Konfiguration in Konflikt stehen, schlägt die Konfiguration fehl und der Server wird beendet.

Zum Beispiel kann die Änderung der Konfiguration von:

    Listen 127.0.0.1:80

zur folgenden Konfiguration fehlschlagen, da das Binden an Port 80 auf allen Adressen mit dem Binden an Port 80 auf nur 127.0.0.1 in Konflikt steht.

    Listen 80

Damit solche Konfigurationsänderungen wirksam werden, muss der Server gestoppt und dann neu gestartet werden.

## Betrachtung von IPv6-Besonderheiten

Eine wachsende Anzahl von Plattformen implementiert IPv6. Die APR unterstützt IPv6 auf den meisten dieser Plattformen und ermöglicht dem httpd, IPv6-Sockets zu verwenden und über IPv6 gesendete Anfragen zu behandeln.

Für httpd-Administratoren kommt erschwerend die Frage hinzu, ob IPv6-Sockets sowohl IPv4- als auch IPv6-Verbindungen handhaben können. Zum Betrieb von IPv4-Verbindungen an IPv6-Sockets werden auf IPv6 abgebildete IPv4-Adressen (Anm.d.Ü.: so genannete IPv4-gemappte IPv6-Adressen) verwendet, welche standardmäßig auf den meisten Plattformen erlaubt sind. Unter FreeBSD, NetBSD und OpenBSD jedoch sind sie standardmäßig deaktiviert, um den Systemgrundsätzen dieser Plattformen zu entsprechen. Auf Systemen, wo dies standardmäßig dekativiert ist, kann dieses Verhalten mit einem speziellen `configure`-Parameter für den httpd geändert werden.

Auf der anderen Seite ist die Verwendung von gemappten Adressen bei einigen Plattformen wie Linux und True64 der einzige Weg, sowohl IPv4 wie auch IPv6 zu verwenden. Wenn Sie möchten, dass der `httpd` IPv4- und IPv6-Verbindungen mit einem Minimum an Sockets behandelt, was die Verwendung von IPv4-gemappten IPv6-Adressen erfordert, dann müssen Sie die `configure`-Option `--enable-v4-mapped` angeben.

`--enable-v4-mapped` ist die Voreinstellung auf allen Plattformen außer FreeBSD, NetBSD und OpenBSD, so dass Ihr httpd wahrscheinlich so übersetzt wurde.

Geben Sie wie in dem folgenden Beispiel bei allen `Listen`-Anweisungen eine IPv4-Adresse an, wenn Sie möchten, dass Ihr httpd lediglich IPv4-Adressen behandelt, unabhängig davon, was Ihre Plattform und die APR unterstützen:

    Listen 0.0.0.0:80
    Listen 192.0.2.1:80

Wenn Sie möchten, dass der httpd IPv4- und IPv6-Verbindungen an separaten Sockets behandelt (d.h. IPv4-gemappte Adressen deaktiviert werden sollen) und Ihre Plattform es unterstützt, dann müssen Sie die `configure`-Option `--disable-v4-mapped` angeben. Unter FreeBSD, NetBSD und OpenBSD ist `--disable-v4-mapped` voreingestellt.

## Angabe des Protokolls bei Listen

Das optionale zweite Protokoll-Argument von `Listen` ist für die meisten Konfigurationen gar nicht erforderlich. Wenn nicht angegeben, sind `https` für Port 443 und `http` für alle anderen Ports die Voreinstellungen. Die Protokollangabe wird sowohl dazu verwendet, herauszufinden, welches Modul Anfragen verarbeiten soll, als auch, um protokollspezifische Optimierungen bei der `AcceptFilter`-Direktive zu aktivieren.

Sie müssen das Protokoll nur angeben, wenn Sie ungewöhnliche Ports benutzen, beispielsweise `https` auf Port 8443:

    Listen 192.170.2.1:8443 https

## Das Zusammenspiel mit virtuellen Hosts

Die Direktive `Listen` implementiert keine virtuellen Hosts - sie teilt dem Hauptserver lediglich mit, an welchen Adressen und Ports er zu lauschen hat. Werden keine `<VirtualHost>`-Container verwendet, dann verhält sich der Server bei allen angenommenen Anfragen gleich. `<VirtualHost>`-Abschnitte können jedoch dazu verwendet werden, ein unterschiedliches Verhalten für eine oder mehrere Adressen und Ports festzulegen. Um einen virtuellen Host einzurichten, muss dem Server zunächst mitgeteilt werden, an den betreffenden Adressen oder Ports zu lauschen. Dann sollte ein `<VirtualHost>`-Abschnitt für die angebene Adresse und den angegebenen Port erstellt werden, um das Verhalten dieses virtuellen Hosts festzulegen. Beachten Sie bitte, dass auf einen `<VirtualHost>` nicht zugegriffen werden kann, wenn er für eine Adresse und einen Port eingerichtet wurde, an dem der Server nicht lauscht.

Verfügbare Sprachen: de | en | fr | ja | ko | tr