FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: hyper2910 am 22 April 2014, 19:21:49

Titel: NGINX und Fhem
Beitrag von: hyper2910 am 22 April 2014, 19:21:49
Hallo zusammen,

würde gerne fhem mit nginx abischern, jedoch bekomme ich es nicht hin.

Hat jemand dafür eine Anleitung?


Gruss Dirk
Titel: Antw:NGINX und Fhem
Beitrag von: Lars am 22 April 2014, 23:47:49
Hallo Dirk,
Was genau ist denn das Problem an dem es scheitert?
Wenn du nach Anleitungen für einen Reverse Proxy mit nginx im Netz suchst solltest du fündig werden.

Gruß
Lars
Titel: Antw:NGINX und Fhem
Beitrag von: hyper2910 am 23 April 2014, 06:36:07
Die Installation klappt, bin aber Linux Anfänger, und habe keine Ahnung wie die Sache konfiguriere, damit ich fhem via HTTPS nutzen kann.

Hier mal die default
server {
listen 80;
  server_name 192.168.XXX.XXX;
  rewrite ^ https://$server_name$request_uri? permanent;  # enforce https
}

server {
listen 443 ssl;
server_name 192.168.XXX.XXX;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/cert.key;
root /var/www;
index index.php;
client_max_body_size 1000M; # set maximum upload size
fastcgi_buffers 64 4K;

location / {
  try_files $uri $uri/ index.php;
}

location @webdav {
  fastcgi_split_path_info ^(.+\.php)(/.*)$;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param HTTPS on;
  include fastcgi_params;
}

location ~ ^(?<script_name>.+?\.php)(?<path_info>/.*)?$ {
  try_files $script_name = 404;
  include fastcgi_params;
  fastcgi_param PATH_INFO $path_info;
  fastcgi_param HTTPS on;
  fastcgi_pass 127.0.0.1:9000;
}
}


Titel: Antw:NGINX und Fhem
Beitrag von: Lars am 23 April 2014, 22:35:50
Wie gesagt, da gibt es tausend Tutorials. Im folgenden musst du nur die Zeile
proxy_pass http://localhost:8000; # my existing apache instance
so anpassen, dass sie auf den fhem Webserver zeigt.

http://chase-seibert.github.io/blog/2011/12/21/nginx-ssl-reverse-proxy-tutorial.html
Titel: Antw:NGINX und Fhem
Beitrag von: hyper2910 am 23 April 2014, 22:46:31
Verstehe ich nicht, bin eher der Hardware Bastler als Software Guru

Momentan spreche ich den fhem über 192.168.178.23:8083/fhem an bzw über meinen dyndns welcher weitergeleitet ist.
Warum brauche ich den Apache?  Ich dachte nginx wäre eine alternative, welche schneller ist.



Gesendet von meinem SGP521 mit Tapatalk

Titel: Antw:NGINX und Fhem
Beitrag von: Lars am 24 April 2014, 21:22:18
Das Tutorial erklärt die Konfiguration von nginx als Reverse Proxy für Apache. Du willst aber nginx als Reverse Proxy für den fhem integrierten Webserver nutzen. Dafür brauchst du nur die von mir referenzierte Zeile so anpassen, dass sie auf deine fhem Webserver URL zeigt.

Du machst alles was im Tutorial steht und anstelle von
proxy_pass http://localhost:8000; # my existing apache instance
Nimmst du
proxy_pass http://localhost:8083; # my existing fhem Webserver instance
Titel: Antw:NGINX und Fhem
Beitrag von: eburkon am 05 Mai 2014, 16:16:53
Servus miteinander,

ich hab das hier mit:

       location /fhem/ {

              auth_basic .Restricted.; #For Basic Auth
              auth_basic_user_file /etc/nginx/htpasswd; #For Basic Auth


              proxy_pass http://127.0.0.1:8083;
              proxy_set_header        Host            $host;
              proxy_set_header        X-Real-IP       $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        }

erfolgreich am Laufen.

Aber bei mir funktionieren die Ajax Geschichten nicht. Muss ich noch irgendwas umschreiben?

Gruss
     Ekkehard
Titel: Antw:NGINX und Fhem
Beitrag von: Happy Fhem User am 06 Mai 2014, 20:14:46
Die Antworten vom FHEM müssen angepasst:


proxy_redirect http://127.0.0.1:8083/ http://<PLEASE TYPE YOUR DOMAIN-NAME HERE>/;


siehe auch hier http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect (http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect)


für die long-polls bietet sich

a) ein hohes Read-Timeout aus Sicht des NGinx an:

proxy_read_timeout 2073600;


b) vom FHEM empfangene (Teil-)Antworten gleich an den Client weiterzusenden (sonst, hab ich Statusänderungen immer mit einem Schaltvorgang verspätet im Webinterface beobachtet):

proxy_buffering off;


Ich hoffe, das hilft
Titel: Antw:NGINX und Fhem
Beitrag von: eburkon am 07 Mai 2014, 14:34:52
@Happy Fhem User

Danke! Jetzt klappts!
Titel: Antw:NGINX und Fhem
Beitrag von: T.ihmann am 02 August 2014, 10:57:02
Ich habe nginx mit Fhem / Raspberry am Laufen, klappt zu 95%, d.h. alle Standardaufgaben funktionieren. Was z.B. nicht klappt, sind solche Befehle die eine Ausgabe in Fhem erzeugen z.B. "update check", normalerweise kommt ja eine Ausgabe im Fhem per nginx ist nichts zu sehen. Der Befehl wird nicht ausgeführt ?

upstream fhem-server { server 192.168.xxx.xxx:8083; }
server {
        listen   80;
        server_name  server.yourdomain.here;

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

        location / {
                proxy_pass http://fhem-server/fhem/; #select your IP from FritzBox
                proxy_redirect http://fhem-server/fhem/ http://server.yourdomain.here/;
                proxy_redirect http://fhem-server:8083/ http://server.yourdomain.here/;
                include /etc/nginx/mime.types;
        }

        location /fhem/ {
                proxy_pass http://fhem-server/fhem/; #select your IP from FritzBox
                proxy_redirect http://fhem-server/fhem/ http://server.yourdomain.here/;
                include /etc/nginx/mime.types;
        }
        proxy_read_timeout 2073600;
        proxy_buffering off;

}


Hat jemand eine Idee ?
Titel: Antw:NGINX und Fhem
Beitrag von: FHEMJourney am 17 November 2014, 17:17:42
Habe mit FHEM unter Nginx exakt das gleiche Problem wie T.ihmann.

Gibt es inzwischen eine Lösung oder neue Erkenntnisse?
Titel: Antw:NGINX und Fhem
Beitrag von: devil77 am 24 November 2014, 07:33:20
Also ich nutze auch nginx als ReverseProxy mit Passwortabfrage und bei mir läuft fhem ohne Problem. Auch die Ausgaben von update, update check usw. werden angezeigt.

server {
listen 883;

ssl on;
ssl_certificate /etc/nginx/ssl/server_fhem.pem;
ssl_certificate_key /etc/nginx/ssl/server.key;

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

location / {
proxy_pass http://localhost:8083;
proxy_redirect off;
proxy_buffering off;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Titel: Antw:NGINX und Fhem
Beitrag von: thedude am 24 Mai 2015, 12:53:07
Hallo

ich habe unter nginx.conf auch

location /fhem/ {

proxy_pass http://127.0.0.1:8083/;

...

}

angelegt. Welche Parameter muss ich bei

proxy_redirect

genau angeben, damit die Antworten zB bei "update check" angezeigt werden.

Wenn ich die location in / umändere geht alles, aber das brauche ich für was anderes.

Danke, Thomas

Titel: Antw:NGINX und Fhem
Beitrag von: thedude am 24 Mai 2015, 13:05:47
OK, habe es selbst noch gefunden:

meine Lösung ist nun die, dass ich bei location und proxy_pass den letzten / weg lasse, also

location /fhem {

proxy_pass http://127.0.0.1:8083;

...

}

Ich denke mit dem proxy_redirect sollte es auch gehen, aber mir reicht es so.

VG, Thomas

Titel: Antw:NGINX und Fhem
Beitrag von: Mumpitz am 25 Januar 2016, 17:51:03
Guten Abend zusammen

bis anhin habe ich bei meinem Router einen Port auf meinen Raspi weitergeleitet und diesen mit basicAuth abgesichert. Hat bis jetzt immer tadellos funktioniert. Ich möchte nun jedoch meine Sicherheit eröhen und nginx auf dem Raspi laufen lassen. zu diesem Zweck habe ich wie im Link von Lar beschrieben nginx installiert und mir per openssl ein key file und ein serverfile erstellt. Allerdings komme ich nun nicht weiter. Nginx habe ich mit dieser config zum laufen gebracht:

nginx.conf in /etc/nginx

user www-data;
worker_processes 4;
pid /var/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;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

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

        ##
        # 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/x-javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # nginx-naxsi config
        ##
        # Uncomment it if you installed nginx-naxsi
        ##

        #include /etc/nginx/naxsi_core.rules;

        ##
        # nginx-passenger config
        ##
        # Uncomment it if you installed nginx-passenger
        ##
       
        #passenger_root /usr;
        #passenger_ruby /usr/bin/ruby;

        ##
        # Virtual Host Configs
        ##

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


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

Nach mir handelt es sich dabei noch um die Originaldatei. Wie gesagt, ich kann nginx nun ohne Fehler starten...

hier meine default in /etc/nginx/sites-available (dies ist der vollständige Inhalt)
# Backend
upstream server_backend  {
      server 192.168.xx.x:8086;
}

## Frontend - Reverse Proxy ##
server {
    listen 443 default_server ssl;
    server_name epxxxx.ddns.net;

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

    ssl on;
    ssl_certificate /usr/local/nginx/conf/servercert.pem;
    ssl_certificate_key /usr/local/nginx/conf/serverkey.pem;
    ssl_session_cache shared:SSL:10m;

    ## Definition Reverse Proxy ##
    location / {
        proxy_pass http://localhost:8086; # my existing fhem instance
        proxy_set_header Host $host;

        # re-write redirects to http as to https, example: /home
        proxy_redirect http://127.0.1.1:8086 https://epxxxx.ddns.net;
    }
}


wie ihr seht, habe ich auf 8086 ein neues FHEMWEB erstellt. Dieses möchte ich nun für den Zugriff von aussen zugänglich machen. Allerdings klappt es so nicht...

Wenn ich den besagten Port auf dem Router freigebe komme ich von aussen auf den Raspi und damit in fhem rein. Allerdings egal ob nginx läuft oder ob ich es stoppe. Dass heisst für mich, dass die Authenifizierung nicht durch nginx gemacht wird....

Fas stimmt nicht mit meiner Config?

Danke
mumpitz
Titel: Antw:NGINX und Fhem
Beitrag von: Suner am 31 März 2016, 08:49:11
Hallo zusammen.
Ich habe ebenfalls ein Problem mit nginx und fhem.
bzw. aktuell noch eher mit nginx.
Ich habe mich mit der config an T.ihmann orientiert. (er kommt ja auf jeden Fall schon mal auf fhem drauf)
Leider klappt es bei mir irgendwie überhaupt nicht.


Zitat von: T.ihmann am 02 August 2014, 10:57:02
Ich habe nginx mit Fhem / Raspberry am Laufen, klappt zu 95%, d.h. alle Standardaufgaben funktionieren. Was z.B. nicht klappt, sind solche Befehle die eine Ausgabe in Fhem erzeugen z.B. "update check", normalerweise kommt ja eine Ausgabe im Fhem per nginx ist nichts zu sehen. Der Befehl wird nicht ausgeführt ?

upstream fhem-server { server 192.168.xxx.xxx:8083; }
server {
        listen   80;
        server_name  server.yourdomain.here;

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

        location / {
                proxy_pass http://fhem-server/fhem/; #select your IP from FritzBox
                proxy_redirect http://fhem-server/fhem/ http://server.yourdomain.here/;
                proxy_redirect http://fhem-server:8083/ http://server.yourdomain.here/;
                include /etc/nginx/mime.types;
        }

        location /fhem/ {
                proxy_pass http://fhem-server/fhem/; #select your IP from FritzBox
                proxy_redirect http://fhem-server/fhem/ http://server.yourdomain.here/;
                include /etc/nginx/mime.types;
        }
        proxy_read_timeout 2073600;
        proxy_buffering off;

}


Hat jemand eine Idee ?



Ich bekomme immer folgende Meldung:
(http://www16.picfront.org/token/nS7h/2016/03/31/2240146.jpg)
Irgendwie ist da der Wurm drin.
Ansonsten funktionierte das immer tadellos mit dem Zugriff auf FHEM ohne reverse Proxy.

Irgendwie ist da grundlegend etwas falsch vermute ich.
Ich hoffe es hat jemand eine Idee :(

PS: noch zur Info: fhem und nginx laufen auf zwei verschiedenen rpi's

Danke im Voraus


Gruß

suner
Titel: Antw:NGINX und Fhem
Beitrag von: Wernieman am 31 März 2016, 09:39:03
Was Du nicht geschrieben hast ... was für eine Fehlermeldung kommt denn?

(Und was sagen die Logfiles des nginx)
Titel: Antw:NGINX und Fhem
Beitrag von: Suner am 31 März 2016, 09:42:17
oh.. ja der LInk hat irgendwie nicht funkioniert..
Mittlerweile klappt es aber auch.. Problem war nur meine basicauth auf dem FHEM *layer8*
jetzt habe ich noch das Problem wie die anderen auch, dass update etc. nicht funktioniert.. aber das kriege ich bestimmt noch hin:)
Titel: Antw:NGINX und Fhem
Beitrag von: Suner am 31 März 2016, 13:16:26
BOA Ich RASTE hier aus  :'( :'( :'(

Ich bekomme es einfach nicht hin, vielleicht kann ja mal jemand noch eine Beispiel-config posten.

Folgendermaßen ist mein Konstruktur aufgebaut:

RPI-1 mit FHEM und smartvisu
RPI-2 NGINX - soll als reverseproxy fungieren

externer Hostname zeigt auf meine Fritzbox.. Fritzbox macht portforwarding auf RPI-2

Ich bekomme es einfach nicht hin..
es funktioniert vorne und hinten nicht und das Internet ist jetzt auch alle.

Ich möchte also ein forwarding machen einmal auf http://192.168.178.xxx:8083 und einmal auf http://192.168.178.xxx/smartvisu.

FHEM bekomme ich ab und an mal hin, aber beides zusammen nie.

Es frustriert ungemein.

Vielleicht hat ja jemand so ein Konstrukt und kann dazu was schreiben wie er es umgesetzt hat.

Gruß

Suner
Titel: Antw:NGINX und Fhem
Beitrag von: Suner am 31 März 2016, 20:25:50
Man entwickelt sich weiter.
Mittlerweile klappt smartvisu und FHEM..
allerdings:

fhem: alles was mit [ip]:8083/fhem/xxxx aufgerufen wird klappt.. alles was mit [ip]:8083/fhem?xxxx aufgerufen wird klappt nicht.

smartvisu: obwohl laut netstat die Verbindung vom Nginx zum smartvisu aufgerufen wird, arbeitet smartvisu scheinbar immer noch mit der ursprünglichen Client-IP.. das ist irgendwie witzlos..
Titel: Antw:NGINX und Fhem
Beitrag von: Wernieman am 01 April 2016, 10:02:03
Sorry aber eine Konkrete Fehlerbeschreibung kann ich aus Deinem Beitrag nicht ersehen.. und damit:
Ohne Input kein Output

Aber eine Kleinigkeit hätte ich noch:
Bist Du Dir sicher, das smartvisu über https läuft?

Bei meiner Synology z.B. ruft man zwar die Konfigseite über http/https auf, aber nach dem Einloggen geht die Verbindung über port 5000 mit einem eigenen java-Applet. Da ist nichts mit Vorwarding ....
Titel: Antw:NGINX und Fhem
Beitrag von: Suner am 01 April 2016, 16:22:16
nöö smartvisu läuft über http.

Fehlermeldung beim Aufruf von fhem webseiten wo ein ? mit im Link ist:

1. URL Aufruf normalerweise xxxx.ddns.net/fhem/xxxx
Ngnix läuft auf Port 12345.. eigentlich für den Aufruf von extern ja egal, nur dass die Portweiterleiutng auf 12345 geht..
Wenn ich aber eine URL mit ? drin aufrufe, dann schreibt er folgende URL: http://xxxx.ddns.net:12345/fhem/?room=0_%C3%9Cberblick

das 12345 gehört da ja nun mal nicht hin. Dann erscheint ein connerror.. Webseite kann nicht aufgerufen werden.


2. bei smartvisu: die Anfrage kommt aus Sicht von Smartvisu von der IP des NginX aber scheinbar scheint im Header noch eine andere IP drin zu stehen. Mir fehlt allerdings hier die Möglichkeit den Header zu rewriten mit der IP des Nginx..