Nginx twee webapplicaties in subfolders?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Jelte
  • Registratie: Juni 2001
  • Niet online
Ik heb op een raspberry pi zowel Pi-Hole als dsmrreader geinstalleerd. En die hebben beide een webinterface. Pi-Hole had lighttpd, maar heb ik omgezet naar dezelfde webserver als die van dsmrreader, namelijk Nginx.

En daar werd het lastig. Ik krijg beide aan de praat, maar niet tegelijk.

Hoe krijg ik door middel van subfolders, example.org/dsmr en example.org/pi-hole, beide applicaties bereikbaar?

Vooral dit antwoord op serverfault leek me in de goede richting te dragen.

Maar ik krijg het niet aan de praat. Hieronder mijn configuratie. Deze is origineel van dsmr. Daar heb ik de benodigde zaken voor Pi-hole aan toegevoegd. (en wat gekloot her en der en weer uncomment). Op dit moment werkt alleen dsmr (de belangrijkste):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
upstream dsmr-webinterface {
    server unix:///var/tmp/gunicorn--dsmr_webinterface.socket fail_timeout=0;
}

server {
    listen      80;
    server_name _;  # No hostname available? Just use the underscore for wildcard matching. :]
#    root /var/www/public;

##      # Uncomment these lines to force additional authentication on application access.
##  # Do not forget to generate a password first in '/etc/nginx/htpasswd' and then RELOAD nginx!
##    auth_basic "Restricted application";
##    auth_basic_user_file /etc/nginx/htpasswd;

    location /static {
        alias /var/www/dsmrreader/static;
    }

    location /  {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://dsmr-webinterface;
#        expires max;
#        return 204 'pixel';
    }
    location /pi-hole/ {
        alias   /var/www/pi-hole/admin;
        index index.php;
#        auth_basic "Restricted"; #For Basic Auth
#        auth_basic_user_file /etc/nginx/.htpasswd;  #For Basic Auth
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

Alle reacties


Acties:
  • 0 Henk 'm!

  • analogue
  • Registratie: Augustus 2010
  • Laatst online: 30-09 21:22
Wat werkt niet? Krijg je foutmeldingen? Wat staat er in je error.log van nginx?

Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Als je location location ~ \.php$ onderaan toevoegt is die natuurlijk globaal, maar ook alleen als er nog niet iets anders een breaking match had...

Acties:
  • 0 Henk 'm!

  • Jelte
  • Registratie: Juni 2001
  • Niet online
analogue schreef op woensdag 7 december 2016 @ 14:59:
Wat werkt niet? Krijg je foutmeldingen? Wat staat er in je error.log van nginx?
Example.org/pi-hole wordt niet gevonden. Dsmr doet het hier wel, maar wel op example.org. Niet op /dsmr.

code:
1
2016/12/07 16:37:00 [error] 5487#0: *559 upstream prematurely closed connection while reading response header from upstream, client: 192.168.x.x, server: _, request: "GET / HTTP/1.1", upstream: "http://unix:///var/tmp/gunicorn--dsmr_webinterface.socket:/", host: "192.168.2.3"


Iets met de standaard config van dsmr lijkt roet in het eten te gooien. Wat doet de upstream? Mogelijk maken om via http://dsmr-webinterface verbinding te maken werkt toch niet (en hoeft niet).

quote]johnkeates schreef op woensdag 7 december 2016 @ 15:21:
Als je location location ~ \.php$ onderaan toevoegt is die natuurlijk globaal, maar ook alleen als er nog niet iets anders een breaking match had...
[/quote] dit begrijp ik niet. Is er eerder een breaking match? Een wat doet dit stukje code?

[ Voor 18% gewijzigd door Jelte op 07-12-2016 17:13 ]


Acties:
  • 0 Henk 'm!

  • Jelte
  • Registratie: Juni 2001
  • Niet online
Vandaag vanuit de andere kant geprobeerd, dus de Pi-hole configuratie aanpassen. Die heb ik gevonden op https://github.com/pi-hole/pi-hole/wiki/Nginx-Configuration en werkt prima voor Pi-hole.

Maar simpelweg een alias toevoegen voor dsmr krijg ik ook niet voor elkaar. Er is blijkaar iets bijzonders met de webinterface van dsmr waardoor die upstream nodig is.

Met onderstaande code werkt pi-hole dus wel, maar dsmr weer niet :(

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/pi-hole;
        index index.html index.htm index.php;
        server_name _;
        autoindex off;
        location / {
          expires max;
          return 204 'pixel';
        }
        location /admin {
          root   /var/www/pi-hole;
          index index.php;
          auth_basic "Restricted"; #For Basic Auth
          auth_basic_user_file /etc/nginx/.htpasswd;  #For Basic Auth
        }
        location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
        location /static {
          alias /var/www/dsmrreader/static;
          index index.html index.htm index.php;
        }
}

Ook geprobeerd om een andere rootmap te pakken (niet pi-hole dus) en voor Pi-hole ook een alias in te voeren, maar dan werkt die ook niet. Dus was ik nog verder van huis :(

edit: HACK!
Dan maar eens kijken of twee verschillende poorten werkt. En jahoor. dsmr op poort 80 (eerste config zeg maar) en pi-hole op poort 81 (tweede config). Twee configs naast elkaar gaat dus prima.
Beetje flauw en onhandig. maar boeiend. Het is niet voor eindgebruikers.

[ Voor 9% gewijzigd door Jelte op 07-12-2016 21:17 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:30

Hero of Time

Moderator LNX

There is only one Legend

Klinkt als een conflict in paden voor de webroot. Dus example.org/ als webroot, gebruik je example.org/pihole of example.org/dsmr dan werkt het niet meer omdat er zaken worden aangeroepen zoals example.org/css/main.css omdat er verwezen wordt naar /css/main.css e.d.
Oftewel, absolute paden ipv relatieve paden.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Uhm, je doet twee applicaties in één Serverblock? Dat klinkt mij niet echt handig in de oren.

Probeer het eens zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server {
        listen 80;
        listen [::];
        root /var/www/pi-hole;
        index index.html index.htm index.php;
        server_name pihole.server.local; #of hoe je het ook wil noemen. Zet het ook even in de DNS config van PiHole of in C\windows\system32\drivers\etc\hosts zodat je PC het snapt. Regeltje toevoegen <ip-adres-van-pi> pihole.server.local
        autoindex off;
        location / {
          expires max;
          return 204 'pixel';
        }
        location /admin {
          index index.php;
          auth_basic "Restricted"; #For Basic Auth
          auth_basic_user_file /etc/nginx/.htpasswd;  #For Basic Auth
        }
        location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
        location /static {
          alias /var/www/dsmrreader/static;
          index index.html index.htm index.php;
        }
}
server {
        listen 80;
        listen [::];
        root /var/www/dsmrreader/static;
        index index.html index.htm index.php;
        server_name dsmrreader.server.local; #of hoe je het ook wil noemen. Zet het ook even in de DNS config van PiHole of in C\windows\system32\drivers\etc\hosts zodat je PC het snapt. Regeltje toevoegen <ip-adres-van-pi> pihole.server.local
        autoindex off;
        location / {
          expires max;
        }
        location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
}

Dan kan je op http://pihole.server.local/admin/ je Pihole admin zien en op http://dsmrreader.server.local het andere ding.

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:30

Hero of Time

Moderator LNX

There is only one Legend

McKaamos schreef op woensdag 7 december 2016 @ 22:14:
Uhm, je doet twee applicaties in één Serverblock? Dat klinkt mij niet echt handig in de oren.

Probeer het eens zo:
code:
1
...

Dan kan je op http://pihole.server.local/admin/ je Pihole admin zien en op http://dsmrreader.server.local het andere ding.
Maar dan heb je subdomeinen, niet als 'subfolder' zoals /pihole en /dsmr. Dit werkt uiteraard wel, maar is niet waar de TS om vraagt. ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Hero of Time schreef op woensdag 7 december 2016 @ 22:30:
[...]

Maar dan heb je subdomeinen, niet als 'subfolder' zoals /pihole en /dsmr. Dit werkt uiteraard wel, maar is niet waar de TS om vraagt. ;)
Klopt.
Aan de andere kant, dan heb je gewoon de applicatienaam voor de URL staan in plaats van er achter. Lijkt me geen ramp ;)

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 30-09 08:10
Jelte schreef op woensdag 7 december 2016 @ 21:14:
Vandaag vanuit de andere kant geprobeerd, dus de Pi-hole configuratie aanpassen. Die heb ik gevonden op https://github.com/pi-hole/pi-hole/wiki/Nginx-Configuration en werkt prima voor Pi-hole.
Volgens mij is het productiever als je eens rustig de nginx manual doorneemt, in plaats van verschillende configs bij elkaar plakken tot 't werkt.

Het is me ook nog steeds niet helemaal duidelijk wat er nu precies misgaat, want daar ben je niet heel duidelijk over. 'Het werkt niet' is wat karig.

Volgens mij heb ik al wel een pitfall gevonden die je sowieso parten (gaat) spelen, ik vermoed echter dat dat nog niet de uiteindelijke clou is.
johnkeates schreef op woensdag 7 december 2016 @ 15:21:
Als je location location ~ \.php$ onderaan toevoegt is die natuurlijk globaal, maar ook alleen als er nog niet iets anders een breaking match had...
Deze deed me even de handleidng erbij zoeken, volgens mij is het gedrag nog net iets complexer dan dat.

Namelijk, nginx loopt eerst alle prefix location specifiers af, en daarna ook alle regexes, waarbij laatstgenoemde voorrang heeft op de longest prefix match, tenzij je een prefix match voorziet van ^~.

In het voorbeeld uit de TS lijkt het me dus dat die hele pi-hole-unit sowieso niet gaat werken als het op PHP-gebaseerd is, omdat het uit de verkeerde document root serveert als \.php$ matchet (doordat die reguliere expressie voor .php voorrang heeft op de prefix /pi-hole/).

Acties:
  • 0 Henk 'm!

  • Jelte
  • Registratie: Juni 2001
  • Niet online
Ik heb het compleet anders opgelost. Reverse Proxy in mijn synology NAS. Werkt prima :)

Dus het is niet meer nodig.

Toch bedankt voor de hulp.
Pagina: 1