Ogranicz Apache do pojedynczego adresu IP

13

Mam serwer z wieloma adresami IP i chcę, aby Apache nasłuchiwał tylko na jednym z nich. Nie wydaje się to trudne, i zrobiłem to już jakiś czas temu, ale tym razem mam problemy. Po pierwsze, oto, gdzie jestem teraz, według mojego zrozumienia:

Każde miejsce, w którym Apache nasłuchuje na porcie 80, nasłuchuje tylko na poprawnym adresie 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>

Nie ma wzmianki o słuchaniu w 0.0.0.0.

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

A jednak ... Apache nie chce zacząć.

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

Na wypadek, gdyby ktoś zapytał, nie jestem związany z tym adresem:

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

Dziennik błędów w /var/log/apache2/error.logpo prostu mówi:

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

Czy przegapiłem miejsce w konfiguracji Apache? Czy jest coś, czego nie pamiętam szukać? Dlaczego to nie jest tak proste, jak sobie przypomniałem?

Dan
źródło
1
Nie jestem obrażony ani nic, ale czy mógłbyś wyjaśnić, w jaki sposób wybrałeś najlepszą odpowiedź na to pytanie? Wybrana odpowiedź dotyczyła innej dystrybucji, podczas gdy moja odpowiedź była trafna w odniesieniu do Ubuntu. Czy mogę w inny sposób zmienić moją odpowiedź, ponieważ jej nie wybrałeś?
pauska
Obie odpowiedzi zawierały Listen 192.168.0.82:80linię krytyczną , której potrzebowałem. Wybrałem odpowiedź cjc, ponieważ zagłębiła się w to, dlaczego ta linia była potrzebna. Pomyślałem, że wspomnienie o komentarzach zastosowanych w wersji Apache dostarczanej z CentOS było miłym dodatkiem. Ale ponieważ wydaje się, że wszyscy zgadzają się, że odpowiedź powinna iść do Pauski, poszedłem naprzód i mu to przekazałem. W końcu zauważam, że w komentarzach Pauski komentarz w istotny sposób wpłynął na odpowiedź cjc w jego obecnej formie.
Dan

Odpowiedzi:

18

Apache domyślnie wiąże się ze wszystkim, nawet jeśli określisz określone adresy IP, na których chcesz uruchomić NameVirtualHost.

Dodaj to w swoich ports.conf:

Listen 192.168.0.82:80

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

Pauska
źródło
16

Zajrzyj do /etc/apache2/ports.confpliku.

Znajdziesz dyrektywę, taką jak:

Listen 80

Komentarz do pól CentOS opisuje tę opcję:

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

Jeśli chcesz, zmień Listen 80linię na Listen 192.168.0.82:80.

Nie możesz teraz uruchomić Apache, ponieważ próbuje on połączyć się z portem 80 na wszystkich interfejsach (oznaczenie 0.0.0.0), a nodenasłuchujesz na 192.168.0.83:80.

Adres IP w blokach hosta wirtualnego oznacza, że ​​ten konkretny host wirtualny będzie odpowiadał na żądania przychodzące na ten adres IP. Nie określa, w jaki sposób Apache będzie wiązał się z interfejsami, które widzi.

cjc
źródło
Httpd.conf jest pusty w Ubuntu, ponieważ używają innego stylu plików konfiguracyjnych (wiele zawiera). Nie ma też żadnego „Listen 80”, jak pokazał grep z OP.
pauska
1
Och, racja. Ubuntu. Zaktualizuję. grepRobił było przeciw: 80 więc to jechało rzeczy Niewykorzystana szansa tak, jak domyślnie Listen 80.
cjc
1
Ten komentarz CentOS naprawdę by mi pomógł. Silly Ubuntu ...
Dan
2

Dyrektywa Słuchaj jest tym, czego szukasz:

Listen 192.168.0.82:80

Więcej informacji w dokumentacji .

stderr
źródło
0

Użyj następujących dokumentów Apache :

Słuchaj 192.168.0.82:80

W niektórych okolicznościach (nie wszystkie) można pójść nieco dalej i zrobić to:

Posłuchaj jakiejś nazwy w moim hostie lokalnym: 80

W ten sposób czynisz konfiguracje apache przenośnymi w sytuacjach, gdy masz farmę serwerów Apache. Są w tym plusy i minusy (tak jak w przypadku wszystkiego innego.)

luis.espinal
źródło