nginx Reverse Proxy auf SSH Server schlägt fehlt

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo liebe RPi-Freunde,

    es handelt sich eigentlich um ein nginx - Problem, aber bevor ich mich nun irgendwo in einem nginx-Forum anmelde versuche ich hier mein Glück.

    Es läuft ein nginx-Server in Version 1.14.2 auf meinem RPi-Zero mit Raspbian Buster. Der nginx Server soll einerseits als Reverse Proxy auf den Port eines Webservers weiterleiten, andererseits auf den SSH Server des RPi auf Port 22.

    Da die Weiterleitung auf den Webserver funktioniert hatte, habe ich dazu alle Konfigurationen in nginx gelöscht um keine Verwirrung zu stiften.

    Die nginx-Konfiguration sieht dazu aktuelle folgendermaßen aus:

    custom_server.conf:

    Den Port des SSH Servers habe ich wie folgt von 22 auf den Port 9999 geändert und auch erfolgreich per Putty überprüft und funktioniert.

    Auszug aus /etc/ssh/sshd_config

    Code
    [...]
    Port 9999
    #AddressFamily any
    ListenAddress 0.0.0.0
    #ListenAddress ::
    [...]

    Problem:

    Führe ich zum Überprüfen der nginx-Konfiguration den Befehl nginx -t aus, so quittiert mir dieser:

    Code
    nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/sites-enabled/custom_server.conf:1

    Selbst endlos wirkendes googlen und herumprobieren mit der .conf bringt mich an der Stelle nicht mehr weiter und ich hoffe hier auf Hilfe :)

    Das stream Modul musste ich vorab manuell laden, so viel hatte ich herausgefunden. Dieses manuelle laden ist in /etc/nginx/nginx.conf in Zeile 1 (oberste Zeile) eingetragen:

    Code
    load_module /usr/lib/nginx/modules/ngx_stream_module.so;
    [...]

    In diesem Sinne, bleibt gesund und schöne Grüße! :thumbup:

  • Zur hilfreichsten Antwort springen
  • Das geht nicht, da es verschiedene Protokolle sind. Der Nginx kann nur was mit HTTP anfangen.

  • Das geht nicht, da es verschiedene Protokolle sind. Der Nginx kann nur was mit HTTP anfangen.

    Quatsch. Mit der Argumentation würden ja nicht mal Websockets funktionieren.

    Das genannte Modul (https://nginx.org/en/docs/stream/ngx_stream_core_module.html) ist schon der richtige Weg.

    opc241 neugestartet hast du nginx aber schon?

  • Quatsch. Mit der Argumentation würden ja nicht mal Websockets funktionieren.

    Das genannte Modul (https://nginx.org/en/docs/stream/ngx_stream_core_module.html) ist schon der richtige Weg.

    opc241 neugestartet hast du nginx aber schon?

    Die Sache ist, wenn ich den service per systemctl restart nginx versuche neuzustarten, wird sogar der o.g. Fehler quittiert.

    Blödsinn^^ Ein Restart des nginx bringt folgendes mit sich:

    Code
    Job for nginx.service failed because the control process exited with error code.
    See "systemctl status nginx.service" and "journalctl -xe" for details.

    In den Ausgaben von journalctl -xe:

    Code
    Sep 23 16:51:47 mm001 nginx[1831]: nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/sites-enabled/custom_server.conf:1
    Sep 23 16:51:47 mm001 nginx[1831]: nginx: configuration file /etc/nginx/nginx.conf test failed
    Sep 23 16:51:47 mm001 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE


    Danach habe ich aber als Notlösung dennoch einen RPi-Reboot durchgeführt.

  • Quatsch. Mit der Argumentation würden ja nicht mal Websockets funktionieren.

    Websockets sind eine Ableitung von HTTP und werden auch via HTTP initialisiert.

    Des Weiteren unterstützt der Nginx explizit Websockets, denn sonst würde der reverse Proxy damit auch nicht funktionieren.

    Dass der Nginx auch Streams unterstützt, war mir nicht bekannt. D.h. er interpretiert die Daten nicht, da er kein SSH spricht.


    Lösche die erste Zeile und erstelle einen symlink:

    Code
    ln -s /usr/share/nginx/modules-available/mod-stream.conf  /etc/nginx/modules-enabled/100-mod-stream.conf

    Schau am besten vorher nach, ob die Datei /usr/share/nginx/modules-available/mod-stream.conf auch existiert.

    Dann im Zielverzeichnis /etc/nginx/modules-enabled/ nachsehen, ob dort nicht schon ein Symlink zu dem Modul vorhanden ist.

    Wenn das erledigt ist den Nginx neustarten und gucken ob es weitere Fehler gibt.

    Man kann die Konfiguration auch mit nginx -t prüfen.

    Einmal editiert, zuletzt von RestlessMud46765 (23. September 2020 um 18:28) aus folgendem Grund: /etc/nginx/modules-enabled/

  • Lösche die erste Zeile und erstelle einen symlink:

    Code
    ln -s /usr/share/nginx/modules-available/mod-stream.conf  /etc/nginx/modules-enabled/100-mod-stream.conf

    Schau am besten vorher nach, ob die Datei /usr/share/nginx/modules-available/mod-stream.conf auch existiert.

    Dann im Zielverzeichnis /etc/nginx/modules-enabled/ nachsehen, ob dort nicht schon ein Symlink zu dem Modul vorhanden ist.

    Wenn das erledigt ist den Nginx neustarten und gucken ob es weitere Fehler gibt.

    Man kann die Konfiguration auch mit nginx -t prüfen.

    Habe ich genau so durchgeführt und hatte ja im ersten Post schon erwähnt, dass ich per nginx -t prüfe ;)

    Danke, aber leider bleibt die Fehlermeldung die selbe:

    Code
    Sep 23 19:35:39 mm001 nginx[1075]: nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/sites-enabled/custom_server.conf:1
    Sep 23 19:35:39 mm001 nginx[1075]: nginx: configuration file /etc/nginx/nginx.conf test failed
    Sep 23 19:35:39 mm001 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
    • Hilfreichste Antwort

    Die Konfiguration funktioniert, wenn ich den Inhalt aus der custom_server.conf aus /etc/nginx/sites-enabled/custom_server.conf in die Hauptkonfiguration /etc/nginx/nginx.conf kopiere und den include auf die /sites-enabled auskommentiere:

    Sobald ich den include wieder einkommentiere, wirft es den bekannten Fehler.

    Schön, dass es so funktioniert, aber ich würde die Konfiguration doch gerne auslagern. Noch jemand eine Idee?

  • Nur die stream Direktive (1. Zeile) aus der custom_server.conf entfernen.

    Im Header der nginx.conf werden zuerst die Module inkludiert:

    Code
    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;

    Weiter unten inkludiert er dann die Dateien in sites-enabled innerhalb der Sektion http.

    Code
    include /etc/nginx/sites-enabled/*;

    Für mein Verständnis wird die Sektion vererbt.
    Wenn dort erneut irgendwas deklariert wird, dass zuvor schon deklariert worden ist, gibt es Fehler.

    Falls ein neuer Fehler kommt, die entsprechende Direktive aus deiner Config entfernen.

Jetzt mitmachen!

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