Wie lasse ich Apache Web Server zwei verschiedene Ports überwachen?

45

Ich hätte gerne einen Apache-Webserver, den ich zu Hause installiert habe, um Port 80 und Port 8080 abzuhören.

Ich habe Listen 8080httpd.conf hinzugefügt und die Apache-Dienste neu gestartet, aber der Server scheint 8080 nicht zu überwachen. Das Eingeben von http: // localhost: 8080 ist zeitlich begrenzt und zeigt meine index.html nicht an, aber http: / / localhost zeigt meine index.html an.

Wie lasse ich es 80 und 8080 hören?

Owen
quelle
Warum lauscht es Ihrer Meinung nach nicht auf Port 8080? Es kann auch nützlich sein, Ausschnitte aus Ihrer Konfiguration zu veröffentlichen.
David Z
1
Haben Sie Apache nach der Bearbeitung der http.conf neu gestartet?
Dana the Sane
@ David Ich habe meine Frage aktualisiert, um zu zeigen, warum ich denke, dass sie nicht auf 8080 hört. Ich habe momentan keinen Zugriff auf httpd.conf. @ Dana - ja.
Owen

Antworten:

63

Eine Standard-Debian-Installation von Apache wird das folgende Konfigurationsfragment haben:

Hören Sie 80

<IfModule mod_ssl.c>
    # Virtuelle Hosts, die auf SSL-Namen basieren, werden noch nicht unterstützt
    # NameVirtualHost-Anweisung hier
    Hören Sie 443
</ IfModule>

Dies weist Apache an, auf Port 80 zu lauschen und auf Port 443 zu lauschen, wenn mod_ssl konfiguriert ist. In Ihrem Fall möchten Sie:

Listen 80
Listen 8080

Sie müssen sicherstellen, dass Sie einen Neustart und keinen Neuladevorgang für Apache ausführen, damit die neuen Listen-Anweisungen beachtet werden. Am sichersten ist es, Apache zu stoppen, sicherzustellen, dass es tot ist, und es erneut zu starten.

Wenn diese Konfiguration nicht funktioniert, überprüfen Sie die Protokolldateien auf Fehlermeldungen. Sie können "netstat -lep --tcp" verwenden, um festzustellen, ob auf Port 8080 etwas zu hören ist. Wenn alles andere nicht funktioniert, versuchen Sie, Apache unter Strace auszuführen, um festzustellen, ob es versucht, sich an diesen Port zu binden, und wenn dies fehlschlägt. aber das Problem nicht protokollieren.

David Pashley
quelle
1
Wo befindet sich dieses Konfigurationsfragment in Apache 2.4? Vielen Dank.
Luís de Sousa
2
Die Beantwortung meiner Frage: /etc/apache2/ports.conf.
Luís de Sousa
7

Diese Antworten sind groß, aber sie lassen die Möglichkeit aus, dass Owen hat dies tatsächlich getan bereits ( „Ich habe hinzugefügt Listen 8080“) bedeuten kann , genau das, was es klingt wie (dh was David hat vorgeschlagen).

Wenn Sie dies bereits getan haben und immer noch feststellen, dass es nicht funktioniert, stellen Sie sicher, dass Sie Ihre Anweisungen für jede Subdomäne, einschließlich der Standard-Subdomäne, richtig konfiguriert haben (falls sie manuell für das Abhören konfiguriert wurde: 80 direkt nach dem Namen).

Sie haben wahrscheinlich eine Anweisung wie diese:

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

Sie müssen dies in <VirtualHost *:8080>oder ändern <VirtualHost *:*>.

msanford
quelle
Ich vermute, das ist mein Problem. Ich denke, Sie haben eine <VirtualHost *: 80> -Direktive. Ich muss das überprüfen.
Owen
1
Wenn Sie keinen virtuellen Host haben, werden Ihnen Inhalte aus dem globalen DocumentRoot bereitgestellt, die wahrscheinlich entweder eine standardmäßige index.html, eine Verzeichnisindexseite, einen 404- oder einen 403-Fehler enthalten. Es würde kein Timeout geben.
David Pashley
2
Klingt so, als ob Sie eine Firewall installiert haben, die Pakete unbemerkt ablegt.
msanford
Es stellte sich heraus, dass es sich um ein Firewall-Problem handelte.
Owen
5

Schritt 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) zum Abhören von Port 80 und zum Abhören von Port 443, wenn mod_ssl konfiguriert ist.

Listen 80
Listen 8080

Schritt 2

#su - service httpd restart

Schritt 3

$ netstat -lntp

(Nicht alle Prozesse konnten identifiziert werden. Informationen zu nicht im Besitz befindlichen Prozessen werden nicht angezeigt. Sie müssen root sein, um alles zu sehen.)

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
quelle
0

Sie können auch überprüfen, ob SELinux aktiviert ist. In der SELinux-Standardkonfiguration können Sie Apache möglicherweise nicht auf Nicht-Standard-Ports ausführen. Hier ist eine Site, die Ihnen zeigt, ob Sie SELinux ausführen und wie Sie es deaktivieren, wenn Sie seine Funktionen nicht möchten oder verwenden. http://www.crypt.gen.nz/selinux/disable_selinux.html


quelle
Oder Sie können SELinux eingeschaltet lassen, wenn Sie sich in einem modernen SELinux-System befinden. Sehen Sie sich an, wie die Ports mit einem Semanage-Port -l gekennzeichnet sind. Siehe danwalsh.livejournal.com/9275.html mit dem Titel "Ich möchte, dass mein Apache-Daemon einen anderen Port überwacht , aber SELinux verhindert dies. Was kann ich tun?"
rev
0

Möglicherweise müssen Sie für einen Standort einen Port 8080 konfigurieren, damit dies funktioniert. Lesen Sie die Dokumentation zu Apache Virtual Hosts . Jede 'Site' kann so eingerichtet werden, dass Verbindungen an bestimmten Ports (und IPs usw.) akzeptiert werden. Verfügt Ihre http.conf über einen virtuellen Host, der nur für Port 80 konfiguriert ist?

Sie können auch bestätigen, dass der Server 8080 überwacht netstat -nlpund nach einem Eintrag an diesem Port sucht.

Dana the Sane
quelle
1
Nein, das ist nicht richtig. Wenn Apache einen Port überwachen soll, müssen Sie die Listen-Direktive verwenden.
David Pashley
1
Nun, es könnte etwas richtig sein - viele Leute erstellen vhosts wie <VirtualHost *: 80>, und in diesem Fall müssten Sie es in <VirtualHost *: *> ändern oder einen anderen vhost für Port 8080 erstellen Listen-Anweisung ist ebenfalls erforderlich)
David Z
@ David Pashley, Der Autor gab an, dass die Listen-Direktive bereits hinzugefügt wurde.
Dana the Sane
0

Vorausgesetzt, Linux läuft netstat -lntpals root, so wie Sie sehen können, ob Apache auf 8080 lauscht oder nicht. Auf diese Weise können Sie feststellen, ob das Problem von Apache nicht abgehört wird oder ob externe Faktoren (z. B. Firewall, Selinux usw.) für Apache eine Verbindungsunterbrechung verursachen.

Jason Tan
quelle