Begrenzen Sie Apache auf eine einzelne IP

13

Ich habe einen Server mit einer Reihe von IP-Adressen, und Apache soll nur eine davon abhören. Es hört sich nicht schwer an, und ich habe es vor einiger Zeit schon einmal gemacht, aber diesmal habe ich ein paar Probleme. Nach meinem Verständnis bin ich jetzt hier:

Jeder Ort, an dem Apache auf Port 80 lauscht, lauscht nur auf der richtigen IP.

/etc/apache2$ grep -R ":80" .
./sites-available/default:<VirtualHost 192.168.0.82:80>
./httpd.conf:<VirtualHost 192.168.0.82:80>
./ports.conf:NameVirtualHost 192.168.0.82:80
./sites-enabled/000-default:<VirtualHost 192.168.0.82:80>

Es wird nicht erwähnt, auf 0.0.0.0 zu hören.

/etc/apache2$ grep -R "0\.0\.0\.0" .

Und doch ... Apache weigert sich zu starten.

/etc/apache2$ sudo /etc/init.d/apache2 start
 * Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

Falls jemand fragt, bin ich nicht an diese Adresse gebunden:

/etc/apache2$ sudo netstat -nap | grep :80
tcp        0      0 192.168.0.83:80       0.0.0.0:*        LISTEN      2822/node

Das Fehlerprotokoll bei /var/log/apache2/error.logsagt nur:

[Wed Aug 08 03:30:18 2012] [notice] caught SIGTERM, shutting down

Habe ich einen Punkt in der Konfiguration von Apache verpasst? Gibt es etwas, woran ich mich nicht erinnern kann? Warum ist das nicht so einfach, wie ich es in Erinnerung hatte?

Dan
quelle
1
Ich bin nicht beleidigt oder so, aber können Sie bitte erklären, wie Sie die beste Antwort auf diese Frage ausgewählt haben? Die Antwort, die Sie ausgewählt haben, bezog sich auf eine andere Distribution, während meine Antwort in Bezug auf Ubuntu genau richtig war. Hätte ich meine Antwort auf irgendeine Weise anders gestalten können, da Sie sie nicht ausgewählt haben?
Pause
Beide Antworten enthielten die kritische Listen 192.168.0.82:80Linie, die ich brauchte. Ich habe die Antwort von cjc gewählt, weil es ein bisschen tiefer ging, warum diese Zeile benötigt wurde. Ich fand es eine schöne Ergänzung, die Kommentare zu erwähnen, die in der mit CentOS gelieferten Apache-Version verwendet wurden. Aber da sich offenbar alle einig sind, dass die Antwort an pauska geht, habe ich sie ihm gegeben. Immerhin bemerke ich an den Überarbeitungen, dass der Kommentar von pauska die Antwort von cjc in seiner jetzigen Form maßgeblich beeinflusst hat.
Dan

Antworten:

18

Apache ist standardmäßig an alles gebunden, auch wenn Sie bestimmte IP-Adressen angeben, auf denen NameVirtualHost ausgeführt werden soll.

Fügen Sie dies in Ihre ports.conf ein:

Listen 192.168.0.82:80

Referenz: http://httpd.apache.org/docs/2.2/bind.html

pauska
quelle
16

Schau in die /etc/apache2/ports.confDatei.

Sie finden eine Direktive wie:

Listen 80

Der Kommentar zu CentOS-Feldern beschreibt diese Option:

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80

Ändern Sie für das, was Sie möchten, die Listen 80Zeile in Listen 192.168.0.82:80.

Sie können Apache derzeit nicht starten, da versucht wird, auf allen Schnittstellen (mit der Bezeichnung 0.0.0.0) eine Bindung zu Port 80 herzustellen, und Sie haben node192.168.0.83:80 abgehört.

Die IP in den virtuellen Host-Blöcken bedeutet, dass dieser bestimmte virtuelle Host auf Anforderungen reagiert, die über diese IP-Adresse eingehen. Es gibt nicht an, wie Apache an die angezeigten Schnittstellen gebunden wird.

cjc
quelle
Die httpd.conf ist unter Ubuntu leer, da sie einen anderen Stil von Konfigurationsdateien verwendet (viele Includes). Es gibt auch keine "Listen 80", wie die Greps vom OP zeigten.
Pause
1
Oh, richtig. Ubuntu. Ich werde aktualisieren. Das, was greper tat, war gegen: 80, also würde es sowieso fehlen, wie der Standard ist Listen 80.
cjc
1
Dieser CentOS-Kommentar hätte mir wirklich geholfen. Dumme Ubuntu ...
Dan
2

Die Listen-Direktive ist genau das, wonach Sie suchen:

Listen 192.168.0.82:80

Weitere Infos in der Dokumentation .

stderr
quelle
0

Verwenden Sie gemäß den Apache-Dokumenten Folgendes :

Hören Sie 192.168.0.82:80

Unter bestimmten Umständen (nicht bei allen) könnte man noch etwas weiter gehen und dies tun:

Listen some_name_in_my_localhost: 80

Auf diese Weise können Sie Ihre Apache-Konfigurationen in Situationen portabel machen, in denen Sie über eine Apache-Serverfarm verfügen. Das hat Vor- und Nachteile (genau wie bei allem anderen).

luis.espinal
quelle