Jak zmusić serwer WWW Apache do nasłuchiwania na dwóch różnych portach?

45

Chciałbym, aby serwer WWW Apache, który zainstalowałem w domu, nasłuchiwał na portach 80 i 8080.

Dodałem Listen 8080do httpd.conf i zrestartowałem usługi Apache, ale serwer nie wydaje się nasłuchiwać na 8080. Punching w http: // localhost: 8080 razy upłynął i nie wyświetla mojego indeksu.html, ale http: / / localhost wyświetli mój index.html.

Jak sprawić, by słuchało 80 i 8080?

piekarnik
źródło
Jak myślisz, dlaczego nie nasłuchuje na porcie 8080? Przydatne może być również opublikowanie fragmentów konfiguracji.
David Z
1
Czy zrestartowałeś Apache po edycji http.conf?
Dana the Sane
@David Zaktualizowałem moje pytanie, aby pokazać, dlaczego myślę, że nie słucha w 8080. Nie mam teraz dostępu do httpd.conf. @Dana - tak.
Owen

Odpowiedzi:

63

Standardowa instalacja Apache w Debianie będzie miała następujący fragment konfiguracji:

Posłuchaj 80

<IfModule mod_ssl.c>
    # Wirtualne hosty oparte na nazwie SSL nie są jeszcze obsługiwane, dlatego nie
    # NameVirtualHost instrukcja tutaj
    Słuchaj 443
</IfModule>

Mówi to apache, aby nasłuchiwał na porcie 80 i nasłuchiwał na porcie 443, jeśli skonfigurowano mod_ssl. W twoim przypadku chcesz:

Listen 80
Listen 8080

Musisz upewnić się, że uruchomiłeś restart, a nie operację przeładowania na Apache, aby zwracał uwagę na nowe dyrektywy Listen. Najbezpieczniej jest zatrzymać apache, upewnić się, że jest martwy i uruchomić go ponownie.

Jeśli ta konfiguracja nie działa, sprawdź pliki dziennika pod kątem komunikatów o błędach. Możesz użyć polecenia „netstat -lep --tcp”, aby sprawdzić, czy coś nasłuchuje na porcie 8080. Na koniec, jeśli wszystko inne nie działa, spróbuj uruchomić apache pod kontrolą strace, aby sprawdzić, czy próbuje się połączyć z tym portem i zawiedzie, ale nie loguje problemu.

David Pashley
źródło
1
W Apache 2.4 gdzie można znaleźć ten fragment konfiguracji? Dzięki.
Luís de Sousa,
2
Odpowiadając na moje własne pytanie: /etc/apache2/ports.conf.
Luís de Sousa,
7

Odpowiedzi te są świetne, ale pozostawiają możliwości, że Owen jest rzeczywiście zrobił to już ( „dodałem Listen 8080”) może oznaczać dokładnie to, co brzmi jak (czyli to, co David zasugerował).

Jeśli już to zrobiłeś i nadal uważasz, że to nie działa, upewnij się, że poprawnie skonfigurowałeś dyrektywy dla każdej subdomeny, w tym domyślnej (jeśli została skonfigurowana ręcznie, aby słuchać: 80 zaraz po nazwie).

Prawdopodobnie masz taką dyrektywę:

<VirtualHost *:80>
 ServerName michaelsanford.com
 etc…
</VirtualHost>

Musisz to zmienić na <VirtualHost *:8080>lub <VirtualHost *:*>.

msanford
źródło
Podejrzewam, że to mój problem. Myślę, że mam dyrektywę <VirtualHost *: 80>. Będę musiał to sprawdzić.
Owen
1
Jeśli nie masz wirtualnego hosta, otrzymasz zawartość z globalnego katalogu DocumentRoot, który prawdopodobnie da ci standardowy plik index.html, stronę indeksu katalogu, błąd 404 lub 403. To nie przekroczyłoby limitu czasu.
David Pashley,
2
Wygląda na to, że masz zaporę ogniową, która cicho upuszcza pakiety.
msanford,
Jak się okazuje, był to problem zapory ogniowej.
Owen
5

Krok 1

#vi httpd.conf
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
</IfModule>

httpd (apache) do nasłuchiwania na porcie 80 i nasłuchiwania na porcie 443, jeśli skonfigurowano mod_ssl.

Listen 80
Listen 8080

Krok 2

#su - service httpd restart

Krok 3

$ netstat -lntp

(Nie można zidentyfikować wszystkich procesów, informacje o procesach nieposiadających własności nie zostaną wyświetlone, musisz być rootem, aby zobaczyć wszystko.)

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:47027               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:80              0.0.0.0:*                   LISTEN      -                   
tcp        0      0 192.168.1.1:8080            0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 ::ffff:127.0.0.1:45100      :::*                        LISTEN      3149/java           
tcp        0      0 :::111                      :::*                        LISTEN      -                   
tcp        0      0 :::80                       :::*                        LISTEN      -                   
tcp        0      0 :::57173                    :::*                        LISTEN      3149/java           
tcp        0      0 :::18197                    :::*                        LISTEN      3149/java           
tcp        0      0 :::22                       :::*                        LISTEN      -                   
tcp        0      0 ::1:631                     :::*                        LISTEN      -                   
tcp        0      0 :::40832                    :::*                        LISTEN      3149/java           
tcp        0      0 ::ffff:127.0.0.1:6880       :::*                        LISTEN      3149/java       
Rajat
źródło
0

Możesz także sprawdzić, czy masz włączony SELinux. Domyślna konfiguracja SELinux może nie pozwalać na uruchamianie Apache na niestandardowych portach. Oto strona pokazująca, czy korzystasz z SELinux i jak go wyłączyć, jeśli nie chcesz lub nie korzystasz z jego funkcji. http://www.crypt.gen.nz/selinux/disable_selinux.html


źródło
Lub możesz pozostawić SELinux włączony, jeśli korzystasz z nowoczesnego systemu SELinux, sprawdź, jak porty są oznaczone portem semanage -l. patrz danwalsh.livejournal.com/9275.html zatytułowany „Chcę, aby mój demon Apache nasłuchiwał na innym porcie, ale SELinux temu uniemożliwia. Co mam zrobić?”
rev.
0

Aby to działało, może być konieczne skonfigurowanie witryny jako portu 8080. Przeczytaj dokumentację dotyczącą wirtualnych hostów Apache . Każda „strona” może być skonfigurowana do akceptowania połączeń na określonych portach (i ipach itp.). Czy masz serwer wirtualny w swoim http.conf, który jest skonfigurowany tylko dla portu 80?

Możesz także potwierdzić, że serwer nasłuchuje na 8080, używając netstat -nlpi szukając wpisu na tym porcie.

Dana Zdrowa
źródło
1
Nie, to nie w porządku. Jeśli chcesz, aby apache nasłuchiwał na porcie, musisz użyć dyrektywy Listen.
David Pashley,
1
Cóż, może to być nieco poprawne - wiele osób tworzy vhosty takie jak <VirtualHost *: 80>, w takim przypadku należy zmienić go na <VirtualHost *: *> lub utworzyć inny vhost dla portu 8080. (Oczywiście, Wymagana jest również dyrektywa słuchania)
David Z
@David Pashley, autor stwierdził, że dyrektywa Listen została już dodana.
Dana the Sane
0

Zakładając, że Linux działa netstat -lntpjako root, jak widać, czy apache nasłuchuje na 8080, czy nie. Pomoże to określić, czy problem polega na tym, że serwer nie nasłuchuje lub czy istnieją czynniki zewnętrzne (np. Zapora ogniowa, selinux itp.), Które powodują przekroczenie limitu czasu połączenia.

Jason Tan
źródło