apache2.2 - port 80 get nicht, andere schon - warum?

  • Hallo zusammen,


    ich habe seltsames Verhalten auf meinem pi und bin langsam mit meinem Latein am Ende... ich hoffe jemand von euch kann mir helfen!


    Mein Problem kurz und knapp:
    Ich kann meinen Pi nicht über den Port 80 erreichen, andere Ports funktionieren allerdings.


    In etwas länger:
    Auf meinem Pi läuft ein Apache2.2 Webserver mit OwnCloud und (demnächst ;) ) noch paar anderen privaten Seiten. Bisher funktioniert alles ganz gut, ssl für OwnCloud ist auch eingerichtet und tut seine Dienste ordnungsgemäß -> Mein Pi ist von extern über https:// erreichbar.
    Aber weil mir das zu umständlich ist jedes mal https:// in der adresszeile einzugeben, wollte ich mir eine Startseite erstellen, die mich dann entsprechend weiterleitet (->andere Baustelle, soll hier nicht Thema sein). Allerdings kann ich meinen Pi nicht über den Port 80 erreichen :s
    Wenn ich in den apache confs nichts außer der Portnummer ändere (also von 80 auf z.B. 1234) dann kann ich meine Startseite über MEINE-DOMAIN:1234 erreichen :denker: Ich habe jetzt sogar die default-config quasi kopiert und dort die Portnummer ausgetauscht -> ohne Erfolg


    Hier meine /etc/apache2/sites-available/default



    Ich habe sogar in beiden Blöcken zum Testen die Portnummern getauscht, auch das hat nichts geändert. Da beide Blöcke identisch sind vermute ich, dass der Fehler wahrscheinlich nicht an Apache liegt. Achja, in ports.conf steht Listen 80 und Listen 1234 drin. (und Listen 443 für OwnCloud)
    An meinem Router habe ich die Regeln zum Portforwarding auch schon mehrfach geprüft
    Auch Lokal kein Durchkommen auf port 80. Daher vermute ich, dass das Problem am Pi selbst liegen wird.


    Aber woran?!


    :helpnew: :helpnew: :helpnew:


    Grüße

  • gibst du beim Versuch auf Port 80 zu verbinden vorn https an oder http bzw. garnichts?

    Edited once, last by Nueffe ().


  • gibst du beim Versuch auf Port 80 zu verbinden vorn https an oder http bzw. garnichts?


    Ich habe schon alle möglichen Kombinationen versucht.
    abc.de
    abc.de:80
    abc.de/index.html
    http://www.abc.de
    http://www.abc.de:80
    http://www.abc.de/index.html
    http://abc.de
    http://abc.de:80
    http://abc.de/index.html
    http://www.abc.de
    http://www.abc.de:80
    http://www.abc.de/index.html


    mit https:// vornweg komm ich nicht da raus wo ich möchte. Das ist aber nicht verwunderlich, default-ssl hat einen anderen directoy-pfad. Aber auch hier gilt wierder https ist Port 443. Komischerweise gehen alle Ports mit Ausnahme von Port 80
    Automatisch zusammengefügt:[hr]
    natürlich nicht abc.de sondern meine domain ;-)

    Edited once, last by jather ().

  • Kommt ein Fehler, oder einfach nur ein Timout?
    Läuft eine Firewall? Wenn nein, was ist die Ausgabe von "iptables -S"? Wenn ja, dort mal checken ob Port 80 geblockt wird.
    Bitte mal "/var/log/apache2/error.log" hier posten.

    ...gettin' paid by the hour, and older by the minute...

    Edited once, last by spacecab ().


  • Kommt ein Fehler, oder einfach nur ein Timout?


    Firefox: Fehler: Verbindung fehlgeschlagen
    Chrome: Diese Website ist nicht verfügbar. ERR_CONNECTION_REFUSED


    Läuft eine Firewall?


    Nicht dass ich wüsste :D




    Wenn nein, was ist die Ausgabe von "iptables -S"?


    wrs iptables -L oder? (EDIT: war zu blöd zum eingeben, Ausgabe "iptables -S" siehe unten)

    Code
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination




    Bitte mal "/var/log/apache2/error.log" hier posten.


    Keine Einträge die zeitlich in Zusammenhang mit einem Versuch eines Seitenaufrufs stehen könnten.
    Automatisch zusammengefügt:
    [hr]


    was ist die Ausgabe von "iptables -S"?


    Ok.. sorry...ich habe mich vertippt beim eingeben von iptables -S .... da kommt folgendes bei raus

    Code
    -P INPUT ACCEPT
    -P FORWARD ACCEPT
    -P OUTPUT ACCEPT

    Edited once, last by jather ().

  • "iptables -L" geht auch, ich benutze immer "-S", weil ich da die Ausgabe genau so bekomme, wie die Regel in der Kommandozeile eingegeben wird. ;)


    Schau mal mit "netstat -pnl" ob überhaupt was am Port 80 lauscht.

    ...gettin' paid by the hour, and older by the minute...


  • "iptables -L" geht auch, ich benutze immer "-S", weil ich da die Ausgabe genau so bekomme, wie die Regel in der Kommandozeile eingegeben wird. ;)


    gut zu wissen;)



    Schau mal mit "netstat -pnl" ob überhaupt was am Port 80 lauscht.


    hier ein wenig zensiert ;)

    Code
    Aktive Internetverbindungen (Nur Server)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    ...
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      19635/apache2
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19635/apache2
    tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      19635/apache2
    ...
    Aktive Sockets in der UNIX-Domäne (Nur Server)
    Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Pfad
    ... (nichts was meiner Meinung nach mit apache2 zusammenhängt)


    Automatisch zusammengefügt:[hr]
    ich habe auch in anderen Foren was von telnet gelesen.
    Wenn ich mich per ssh (aus dem lokalen Netz) auf einen Rechner in einem anderen Netz anmelde und auf der Kiste dann "telnet abc.de 80" ausführe kommt sofort zurück:

    Code
    Trying MEINE-IP...
    telnet: Unable to connect to remote host: Connection refused


    Das gleiche mit "telnet abc.de 1234" liefert:


    Vielleicht hilft das jemandem weiter?

    Edited once, last by jather ().

  • Ok, dann mal der Check, ob es am Apache oder am Port generell liegt.
    Apache stoppen und folgendes Skript starten:

    Code
    while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; cat /var/www/index.html; } | nc -l 80; done


    Dann mal im Browser die Seite aufrufen.

    ...gettin' paid by the hour, and older by the minute...


  • Ok, dann mal der Check, ob es am Apache oder am Port generell liegt.
    Apache stoppen und folgendes Skript starten:

    Code
    while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; cat /var/www/index.html; } | nc -l 80; done


    Dann mal im Browser die Seite aufrufen.


    damit bin ich leicht überfordert :blush:


    apache2 krieg ich noch gestoppt, aber "skript starten"? ich habe jetzt die Zeile einfach mal kopiert und ausgeführt.
    Keine Ausgabe, kein Erfolg. Oder soll ich damit was anderes anstellen?
    Ich komme dann nur mit STRG-C raus. Sowohl während des Ausführens, als auch nach STRG-C keine resultate beim Seitenaufruf

  • Code
    service apache2 stop
    [ ok waiting ..
    root@raspitrainee ~ # while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; cat /var/www/index.html; } | nc -l 80; done


    Dann passiert erstmal gar nichts, das ist korrekt. Dann rufst du die gewünschte Seite im Browser auf und kriegst als Antwort sowas

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Nachtrag:
    ich bin eigentlich nur per SSH auf dem Pi. Habe jetzt mal ne Remotedesktopverbindung gestartet. wenn ich dann das Skript laufen lasse und im Browser localhost aufrufe, wird was ausgespuckt:


    Automatisch zusammengefügt:[hr]


    Nachtrag:
    ich bin eigentlich nur per SSH auf dem Pi. Habe jetzt mal ne Remotedesktopverbindung gestartet. wenn ich dann das Skript laufen lasse und im Browser localhost aufrufe, wird was ausgespuckt:


    also im Browser auf dem Pi localhost spuckt sachen aus,
    auf einem anderen Rechner die adresse des pis angeben (lokale adresse) spuckt nichts aus

    Edited once, last by jather ().


  • damit bin ich leicht überfordert :blush:


    apache2 krieg ich noch gestoppt, aber "skript starten"? ich habe jetzt die Zeile einfach mal kopiert und ausgeführt.


    Genau das solltest du tun. ;)


    Quote


    Keine Ausgabe, kein Erfolg. Oder soll ich damit was anderes anstellen?
    Ich komme dann nur mit STRG-C raus. Sowohl während des Ausführens, als auch nach STRG-C keine resultate beim Seitenaufruf


    Jep, genau das soll auch passieren. Es gibt keine Ausgabe an der Konsole. Aber während das Skript läuft (bevor STRG+C), rufst du die Seite auf, im Browser. Dann sollte genau die Seite angezeigt werden.
    Bitte noch mal vergewissern, dass die Datei "/var/www/index.html" auch existiert. Ansonsten einfach eine andere Datei im Skript eintragen, die HTML-Code enthält (keine PHP, etc.).


    Mir ist aber gerade noch eingefallen, dass wir die /etc/apache2/ports.conf noch nicht überprüft haben, hier könnte tatsächlich die Wurzel des Übels liegen.

    ...gettin' paid by the hour, and older by the minute...

  • Starte auf dem Raspi mal den Apache und führe anschließend ein tcpdump aus:

    Code
    tcpdump -i eth0 port 80


    Anschließend versuchst du von einem anderen Host, die Verbindung auf Port 80 aufzubauen.


    Bekommst du keine Ausgabe, liegt das Problem mit ziemlicher Sicherheit nicht am Apache, sondern an einer Firewall oder irgendetwas Vorgeschaltetem. :s
    Bekommst du eine Ausgabe kommt die Verbindung zumindest auf Port 80 des Raspis an. Dann ist es also eher eine Sache der Verarbeitung durch Apache.

    Linux - Für das Leben nach dem Absturz!

  • Ok, nochmal zusammenfassend:


    • SSH von meinem Notebook zum Pi
    • apache gestoppt
    • geprüft ob /var/www/index.html existiert -> inhalt
      HTML
      <html><body><h1>It works! VAR/WWW!!!</h1>
      </body></html>


    • skript gestartet
    • skript läuft weiter
    • auf einer remotedektopverbindung am pi, im browser des pis "localhost/index.html" aufgerufen. Ausgabe auf der Konsole:

      Anzeige im Browser des Pis: Die Seite konnte nicht geladen werden.

    • auf meinem Notebook im Browser "192.168.1.49/index.html"(IP des Pis) aufgerufen (bei laufendem Skript). Keine Ausgabe auf der Konsole, Anzeige im Browser (Firefox) "Verbindung fehlgeschlagen"

  • auf einer remotedektopverbindung am pi, im browser des pis "localhost/index.html" aufgerufen. Ausgabe auf der Konsole: [code]GET /index.html HTTP/1.1


    Ok, mein Fehler. Du solltest NUR die IP (http://[font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]192.168.1.49) aufrufen. Dann wird die Seite "index.html" ausgegeben.[/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Aber zumindest wissen wir nun schon mal, dass es an irgendeiner Firewall oder ähnlichem liegt, da er lokal zu erreichen ist.[/font]

    ...gettin' paid by the hour, and older by the minute...

  • Genau aus diesem Grund wäre die Ausgabe von tcpdump interessant.
    Wie du bereits schreibst, funktioniert die Verbindung vom "localhost", der durch eine Firewall nicht beschränkt wird.

    Linux - Für das Leben nach dem Absturz!


  • habe ich gemacht, sofern "anderer Host" mein Notebook ist.
    Ausgabe wenn ich im Browser am Notebook "192.168.1.49/index.html" aufrufe -> nichts
    Ausgabe wenn ich im Browser am Notebook "192.168.1.49:80" aufrufe


    für den Aufruf von "192.168.1.49" erhalte ich

  • nur so ne dumme Frage am Rande um einen weiteren möglichen fehler auszuschließen:


    Du hast dir ja virtual hosts erstellt... hast du sie auch "enabled"?
    klingt vll. doof aber ich hab das auch schon mal vergessen ^^


  • nur so ne dumme Frage am Rande um einen weiteren möglichen fehler auszuschließen:


    Du hast dir ja virtual hosts erstellt... hast du sie auch "enabled"?
    klingt vll. doof aber ich hab das auch schon mal vergessen ^^


    berechtigter Einwand, ich schließe eigene Dummheit nie aus ;)
    Aber wie ich schon geschrieben habe, habe ich in der default beide vhosts drin, also für port 80 und port 1234. port 1234 funktioniert ja einwandfrei.
    Hier nochmal der Inhalt von /etc/apache2/sites-enabled/000-default (und ja, MEINE-DOMAIN habe ich erstetzt durch meine Domain, gefolgt von .de, also z.b. abc.de)

  • In der "port.conf" hast du aber auch nicht nur auf localhost reduziert, oder?
    Die Einträge sollten so aussehen:

    Code
    Listen 80
    Listen 1234

    ...gettin' paid by the hour, and older by the minute...