Flask Server extern nicht über https erreichbar

  • Hallo zusammen,

    ich brauche für ein Warnsystem einen Flask Server, der über eine ssl Verbindung kommuniziert. Wenn der Webserver mit http (also Standardgemäß) gestartet wird, funktioniert der Aufruf der Webseite (über die IP:Port) sowohl über den internen Browser auf dem Raspberry als auch extern vom z.B. MacBook-Browser. Starte ich den Webserver mit https (wie im folgenden Code implementiert), lässt sich die Webseite nur über den internen Browser des Raspberry's erreichen. Von extern ist die Seite nicht erreichbar. Da ich aber von einem anderen Gerät auf die Webseite zugreifen muss, frage ich mich, wie sich dies umsetzen lässt.

    # nc -zv ip Raspbery 5000

    sagt no connection.

    Ich vermute der Flask Server läßt https von extern nicht zu. Woran kann das liegen und wie kann ich den Webserver von außen über https erreichbar machen?

    Vielleicht kann mir jemand einen Tip geben. Vielen Dank im voraus.


    Hier mein Webservercode:

    Python
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def index():    return 'Hello World!'
    
    if_name_=='_main_':
    app.run(host="0.0.0.0", debug=True, ssl_context=('certnew.cer', 'private.key'))



    Im Terminal starte ich den Server mit folgendem Befehl:
    sudo python3 app.py --cert=certnew.cer --key=private.key

  • Da ich aber von einem anderen Gerät auf die Webseite zugreifen muss, frage ich mich, wie sich dies umsetzen lässt.

    # nc -zv ip Raspbery 5000

    sagt no connection.

    Ich vermute der Flask Server läßt https von extern nicht zu.

    "no connection" kenne ich bei nc nicht. Nur:

    Code
    ... failed: Connection refused

    oder

    Code
    ... timed out: Operation now in progress

    Starte mal vor dem nc-Aufruf, auf deinem PI:

    Code
    sudo tcpdump -c 20 -vvveni eth0 dst port 5000

    Wie ist danach die Ausgabe von tcpdump?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • du hast recht. Sagt auf dem MacBook Connection refused, wenn ich den Flask Server für https mit Certificate konfiguriert und gestartet habe. Bei einer http Konfiguration ist die Welt in Ordnung. # nc command gibt kein Fehler aus.

    # nc Command rufe ich gleich mal auf den PI auf.

  • Hat sich erledigt. Funktioniert nun mit der Port Änderung auf 443. Kann jetzt extern mit https zugreifen

    app.run(host="0.0.0.0", port=443, debug=True, ssl_context=('certnew.cer', 'private.key'))

  • Hallo,

    grundsätzlich ist es keine gute Idee, den eingebauten Server produktiv z nutzen. Zitat aus der Doku: "Flask’s built-in server is not suitable for production".

    Wenn du das machen willst, was ja scheinbar der Fall ist, dann solltest du mindestens einen WSGI-Applikationsserver wie gunicorn davor setzen. Und ggf. noch nginx als Reverse Proxy. Klingt kompliziert, ist es aber nicht - und ist ein sehr gängiges Setup. Hat auch den Vorteil, dass du gunicorn (und ggf. nginx) beim Systemstart via systemd starten kannst und sich systemd dann auch um den Neustart des Servers kümmert, wenn er crasht.

    Gruß, noisefloor

  • Danke Noisefloor für deine guten Hinweise. Das System wird im privaten Bereich eingesetzt, also nicht so kritisch. Aber deine Erklärungen sind sehr interessant das System zu verbessern. Schaue mir nun die Software gunicorn und nginx an und arbeite mich etwas dazu ein. Wichtig auch dein Tip zum systemd.

  • Hallo,

    du hattest hat "Warnsystem" geschrieben - klingt irgendwie wichtig ;)

    Ich habe im privaten Bereich auch dieses Setup, halt nur mit Django, also nginx + gunicorn + Django. Django verhält sich da ja genau so, sprich dass der Build-in Server nicht produktiv genutzt werden sollte.

    Gruß, noisefloor

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!