NGINX und Fhem

Begonnen von hyper2910, 22 April 2014, 19:21:49

Vorheriges Thema - Nächstes Thema

hyper2910

Hallo zusammen,

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

Hat jemand dafür eine Anleitung?


Gruss Dirk
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Lars

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
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

hyper2910

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;
}
}


Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Lars

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
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

hyper2910

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

Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Lars

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
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

eburkon

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
FHEM auf Rpi48G, KNX via knxd und IP Interface, Hue, FS20, und ein paare externe Sachen via MQTT

Happy Fhem User

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


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

eburkon

@Happy Fhem User

Danke! Jetzt klappts!
FHEM auf Rpi48G, KNX via knxd und IP Interface, Hue, FS20, und ein paare externe Sachen via MQTT

T.ihmann

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 ?

FHEMJourney

Habe mit FHEM unter Nginx exakt das gleiche Problem wie T.ihmann.

Gibt es inzwischen eine Lösung oder neue Erkenntnisse?

devil77

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;
}
}

thedude

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


thedude

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


Mumpitz

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