[teilweise erledigt] Reverse Proxy Dauerschleife

Begonnen von Hraaig, 20 Februar 2017, 13:59:24

Vorheriges Thema - Nächstes Thema

Hraaig

Hallo zusammen.
Ich bin blutiger Anfänger und hab mich mit YouTube Videos, Wiki beiträgen und Blogs schonmal so weit vorgearbeitet, dass ich im LAN die IP des reverse Proxys aufgerufen habe und dann zu FHEM weitergeleitet wurde.

Ohne großartig die Unterschiede zu verstehen hab ich mich für nginx als reverse Proxy entschieden.
Im Endeffekt soll mit einer DynDNS bei goip.de mit Hilfe von Subdomains (fhem.XXX.goip.de, geo.XXX.goip.de ... FHEM, Alexa, webhooks etc. erreichbar sein. alle Dienste laufen auf dem Raspberry Pi.

nachdem ich jetzt nachgelesen habe, wie ich Standard http anfragen von Port 80 auf SSL 443 umleite funktioniert leider nichts mehr. unter der nginx-ip bekomme ich die Authentifizierung Meldung und bleibe dort in einer Endlosschleife.

meine nginx.conf:
user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        auth_basic "NGINX";
        auth_basic_user_file /etc/nginx/.htpasswd;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


unter sites-available hab ich 2 konfigurationen mit einem symbolischen link in die sites-enabled:
default:
server {
        listen 80;
        return 301 https://$host$request_uri;
}


fhem-app:
server{
        listen 443;

        ssl_certificate         /etc/nginx/cert.crt;
        ssl_certificate_key     /etc/nginx/cert.key;

        ssl on;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        ssl_prefer_server_ciphers on;

        location / {

              proxy_set_header        Host $host;
              proxy_set_header        X-Real-IP $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header        X-Forwarded-Proto $scheme;

              # Fix the "It appears that your reverse proxy set up is broken" error.
              proxy_pass          http://localhost:8083;
              proxy_read_timeout  2073600;
              proxy_buffering off;

                auth_basic "Restricted Contend";
                auth_basic_user_file /etc/nginx/.htpasswd;
        }
}


die .htpasswd habe ich wie hier  https://wiki.fhem.de/wiki/HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver beschrieben angelegt.
Ich weiß, dass es hier schon viele beiträge gibt, aber ich komme aus dieser Endlosschleife nicht raus und bin eigentlich der Meinung alles befolgt zu haben :)

Dann noch eine kleine allgemeine Frage zu reverse Proxys:
Wenn ich das Prinzip richtig verstanden habe, mache ich im Nachgang nur noch den Port 80 im Router auf und leite den an den Reverse Proxy weiter.
Dieser ist dann per SSL und Passwort gesichert.
Wie sieht es dann mit dem Passwort und SSL in FHEM aus? muss dort auch SSL und basicauth aktiviert werden?
oder leitet der Proxy SSL -> Fhem HTTP?
und wie wird das Passwort von Fhem dann behandelt? das müsste dann ja im Klartext in der nginx config stehen?!

Hraaig

Problem hat sich erledigt.
irgend etwas schien mit der .htpasswd nicht zu stimmen. trotz mehrmaligem widerholen der Anleitung.

Wer auch Probleme damit hat, sollte die .htpasswd mit den apacheutils anlegen.


sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd <username>


Die allgemeine Frage zum reverse Proxy besteht aber nach wie vor :)

Wernieman

Ich verstehe nicht, wo Du allgemein hängt, aber bezüglich Deiner Fragen:

1. Du öffnest NICHT Port 80, sondern 443, also https! Genau dafür definiert Du einen Proxy gegenüber fhem. Das Du bei Port 80 einen redirekt auf https machst, ist dabei nur eine Benutzerfreundlichkeit. Ich würde deshalb den Port extern nicht öffnen.
Kurzgesagt: Nur 443

2. Passwort:
Es dient nur zur Autentifizierung gegenüber den Proxy, d.h. FHEM bekommt davon überhaupt nichts mit. Wenn Du bei FHEM die Authentifizierung anschaltest, müsstest Du Dich dort auch nochmal authentifizieren.

3. http/https
Du kommst von extern mit https (port 443) rin. Der nginx überprüft Deine ANfrage und STELLT Selber eine Anfrage gegenüber FHEM (Funktion eines Proxys). Deshalb kann der nginx dort auch das Protokoll von https zu http ändern.

4. Anfang Deiner Erklärung
Du schriebst am Afang, das DU verschiedene Dinge im Netz erreichbar machen möchtest, ala fhem.XXX.goip.de, geo.XXX.goip.de.

Macht geo IP wirklich verschiedene Subdomains für Dich auf? Ich befürchte nicht. Normalerweise macht man deshalb auch eher folgendes:
XXX.goip.de/fhem
XXX.goip.de/2.Dienst
XXX.goip.de/3.Dienst

Lalso per Ordnerstruktur in der Domain ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Hraaig

Hallo Wernieman

vielen dank für die ausführliche Antwort. Jedoch wirft das die ein oder andere weitere Frage auf :)
zu 1. wenn ich eh nur den Port 443 in der fritzbox aufmache, wäre die weiterleitung in nginx von 80 auf 443 ja obsolet, da 80 durch die firewall der fritzbox eh gesperrt wäre. Somit wird der nginx nur noch zum verteiler der subdomains an die einzelnen services (fhem, diskstation, geofency etc.) - Verstanden und abgeharkt :)

zu 2. / 3. sollte ich in fhem die basic authentifizierung aktiviert haben, müsste ich z.B. geofency.app 2 verschiedene username:passwort mitgeben, damit die anfrage der app zuerst durch den proxy, dann durch fhem kommt?!

zu 4. www.goip.de erlaubt mir mehrere subdomains. Dort hat jeder user mehrere "Router" und diese "Router" können wiederum mehrere subdomains haben. Allerdings updatet die Fritzbox nur einen Router. Dadurch werden aber alle subdomains dieses "Routers" mit der aktuellen ip versorgt.