Nginx Proxy Manager werkend krijgen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Ik heb thuis een webservertje draaien op een virtuele Ubuntu 20 LTS server. Dit werkt prima. Zelfs netjes een certificaat erop met LetsEncrypt.
Echter leek het me handiger om dit in te gaan stellen achter een reverse proxy als extra beveiligingslaag. En wellicht in de toekomst om meer naar buiten open te kunnen stellen.
Op dit moment heb ik in mijn router een rechtstreekse port forwarding naar de webserver.

Aangezien ik al een Docker server heb, kreeg ik het idee om Nginx Proxy Manager hiervoor te gebruiken. Die draait dus als Docker container met een Bridged network.
Dus daar een nieuwe Proxy host toegevoegd, https scheme gekozen en een nieuw LetsEncrypt certificaat laten genereren (de oude loopt toch binnenkort af).
Maar mijn webserver is nu niet meer bereikbaar en heeft een '500 Internal Server Error'. Aan de serverkant is niks gewijzigd. Als ik de proxy er tussenuit haal en hem weer rechtstreeks instel, dan werkt ie weer.

Kan het zijn dat omdat Nginx in Docker draait en de webserver niet, dat dit dan niet werkt?
Heeft iemand hier ervaring mee? Ik mis nog een puzzelstukje ergens om dit werkend te krijgen :?
Ik had voor de test de port forwarding van de webserver aangepast naar de server met Docker uiteraard.

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol

Alle reacties


Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 22:49

DukeBox

loves wheat smoothies

Heb je beide dockers wel in het zelfde docker netwerk gezet zodat de proxy bij je website kan/mag ?

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Dit is misschien het probleem inderdaad. De webserver draait direct onder Proxmox met een bridged netwerk en de Nginx proxy manager draait als Docker container op een virtuele Docker server die ook op diezelfde Proxmox host draait. Ik zou niet weten hoe ik die aan hetzelfde netwerk krijg.

Ik heb trouwens geen VLAN's of DMZ o.i.d. in mijn thuisnetwerk.
Ik vermoed dat Nginx Proxy Manager alleen maar werkt voor webservers die ook in een Docker container draaien.
Of zou ik beter voor een andere Reverse proxy oplossing kunnen gaan?
Docker vind ik zo handig om snel dingen te deployen :) Maar moet wel werken natuurlijk.

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • RubenDJ
  • Registratie: Februari 2000
  • Laatst online: 12-09 13:54
Volgens mij maken de netwerken niets uit, zeker niet als ze bridged zijn. Er vanuitgaande dat al je hosts op hetzelfde subnet zitten bijvoorbeeld 192.168.1.x zou het moeten werken.

Ik draai ook Nginx Proxy Manager op mijn Proxmox server en deze forward prima naar onder andere mijn Home Assistant VM. Maar, daarvoor moest ik wel de X-Forwarded-For header en trusted proxies instellen in de Home Assistant config. Best kans dat je dus ook iets moet instellen in je webserver.

Trouwens je kunt ook het certificaat van je webserver verwijderen. Daar draagt NPM immers zorg voor.

[ Voor 15% gewijzigd door RubenDJ op 26-11-2021 15:33 ]

specs


Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Bedankt Ruben. Inderdaad alles zit op hetzelfde subnet. In mijn geval gaat het om Peertube maar ik heb ook Home Assistant draaien. Maar persoonlijk ben ik niet zo'n fan van alles naar buiten openstellen.

Ik gebruik om Home Assistant te benaderen van buitenaf gewoon m'n OpenVPN en ben ook bezig om te kijken of het handiger is om WireGuard te gaan gebruiken. Maar ik dwaal af ;)

Ik zal eens kijken of ik iets kan met dat X-Forwarded-For verhaal. Zodra ik het werkend krijg, zal ik zeker het certificaat van NPM verwijderen. Maar eerst maar es werkend zien te krijgen via NPM of equivalent :)

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 22:49

DukeBox

loves wheat smoothies

RubenDJ schreef op vrijdag 26 november 2021 @ 15:32:
Volgens mij maken de netwerken niets uit, zeker niet als ze bridged zijn.
Wel als je instance names gebruikt in forwarding (wat ook aan te raden is).

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Instance names? Ik kan daarvan niks terugvinden in de NPM config. Heb je daar misschien een voorbeeld van?
Ik ben trouwens nieuw in deze materie dus kan zijn dat ik een rare vraag stel ;)

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • Faifz
  • Registratie: November 2010
  • Laatst online: 09-09 15:24
Kijk eerst of de proxy wel bereikbaar is over tcp/80 (HTTP) zodat je degelijk een certificaat kunt opvragen. Het maakt niet uit of de webserver in een ander netwerk zit, zolang je router het kan routen (bv. van 192.168.10.0/24 naar 192.168.20.0/24). En nee Nginx Proxy Manager werkt ook voor non-docker containers, zolang je maar http of https gebruikt.
Scally schreef op vrijdag 26 november 2021 @ 15:14:
Dit is misschien het probleem inderdaad. De webserver draait direct onder Proxmox met een bridged netwerk en de Nginx proxy manager draait als Docker container op een virtuele Docker server die ook op diezelfde Proxmox host draait. Ik zou niet weten hoe ik die aan hetzelfde netwerk krijg.
De host met docker zou ook gebridged moeten worden naar uw thuisnetwerk. Vergeet de regels niet op de host firewall.

Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Yep, de proxy is wel bereikbaar. Ik had zowel poort 80 als 443 opengezet (bij port forwarding op m'n router) omdat ik weet dat dat nodig is om bij LetsEncrypt een certificaat op te vragen. Ik heb in NPM daarna een certificaat opgevraagd en dat ging prima.

De regels op de host firewall. Da's een goeie. Ik neem aan dat je daarmee de Ubuntu server bedoeld waar ik Docker op draai. Daar heb ik inderdaad de firewall aan staan, maar bij de rules staat geen poort 80 of 443.
Hmm zou dat t probleem kunnen zijn?

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • Faifz
  • Registratie: November 2010
  • Laatst online: 09-09 15:24
Scally schreef op vrijdag 26 november 2021 @ 16:45:
Yep, de proxy is wel bereikbaar. Ik had zowel poort 80 als 443 opengezet (bij port forwarding op m'n router) omdat ik weet dat dat nodig is om bij LetsEncrypt een certificaat op te vragen. Ik heb in NPM daarna een certificaat opgevraagd en dat ging prima.

De regels op de host firewall. Da's een goeie. Ik neem aan dat je daarmee de Ubuntu server bedoeld waar ik Docker op draai. Daar heb ik inderdaad de firewall aan staan, maar bij de rules staat geen poort 80 of 443.
Hmm zou dat t probleem kunnen zijn?
Tuurlijk. Je gaat 80 en 443 moeten toelaten (TCP).

Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Die heb ik inmiddels opengezet op m'n Docker server maar nog steeds hetzelfde resultaat. Ik zal vast ergens iets moeten wijzigen aan de config zoals RubenDJ zei.
Verder Googlen maar...
Hieronder mijn Peertube config (ik heb mijn domein naam veranderd in mijn.server).

server {
listen 80;
listen [::]:80;
server_name mijn.server.nl;

location /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/certbot;
}
location / { return 301 https://$host$request_uri; }
}

upstream backend {
server 127.0.0.1:9000;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mijn.server.nl;


Daaronder staat nog een certificaat config stukje wat ik weg kan halen zodra dit werkt.
Maar ik vermoed dat ik hier wat aan moet passen om dit werkend te krijgen :?

[ Voor 63% gewijzigd door Scally op 26-11-2021 21:42 ]

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • Faifz
  • Registratie: November 2010
  • Laatst online: 09-09 15:24
Scally schreef op vrijdag 26 november 2021 @ 21:26:
Daaronder staat nog een certificaat config stukje wat ik weg kan halen zodra dit werkt.
Maar ik vermoed dat ik hier wat aan moet passen om dit werkend te krijgen :?
Nee kun je niet weghalen als je het wil serveren op https (443) zelfs als het achter een reverse proxy staat. De LE certificaat die je op de proxy hebt staan is wat geserveerd wordt aan mensen die uw website bezoeken. Dus op de back-end, mag je een self-signed certificaat gebruiken (wat gemakkelijker is ipv dat je 2x LE certs zit aan te vragen).

Wat je wel kan doen is dat peertube alleen op poort 80 luistert als dit het gemakkelijker zou maken voor je. De proxy werkt toch al op 443 dus het is niet zo erg als de back-end (peertube) dan op poort 80 werkt. Dan heb je geen certificaten nodig.

443 -> Proxy -> 443 -> Peertube (SSL nodig op proxy en peertube)
443 -> Proxy -> 80 -> Peertube (geen SSL nodig)

Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Bedankt allemaal maar het wordt mij te ingewikkeld. Heb diverse dingen geprobeerd maar krijg t niet werkend. En ik wil de boel niet stuk maken of onnodig ingewikkeld. Dan maar zonder proxy.

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • thijsjek
  • Registratie: Juni 2010
  • Laatst online: 25-02 08:41
Nou ja, je bent op de goede weg.

Kun je eens met de meest simpele config beginnen en kijken of het werkt.
code:
1
2
3
4
5
6
7
8
9
server {
  listen 80;
  listen [::]:80;
  server_name mijn.server.nl;

    location / {
        proxy_pass http://127.0.0.1:9001;
    }
}


Ik zou als ik jou was werken met een nginx.conf waar alle standaard instellingen in staan. En dan alle servers in een aparte .conf zetten en deze included maken om het overzichtelijk te houden.
Tevens de instellingen voor de certificaten (wildcard) en de headers settings heb ik ook in een aparte file.

Ik heb namelijk z'n 20tal services bereikbaar op m'n interne netwerk en 3 tal via het internet.

Main config
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#user root;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 4096;
        use kqueue;
        multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        types_hash_max_size 2048;

        server_names_hash_bucket_size 64;
        server_name_in_redirect off;

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

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384;
        ssl_ecdh_curve secp384r1:X448:X25519;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets on;
        resolver 192.168.2.240 192.168.2.241 valid=300s;
        resolver_timeout 30s;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /usr/local/etc/letsencrypt/live/mydomain.com/cert.pem;

        ##
        # Gzip Settings
        ##

        gzip on;
        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;

        ##
        # Hardening
        ##

        client_body_buffer_size 1k;
        client_header_buffer_size 1k;
        client_max_body_size 500M;
        client_body_timeout 10;
        client_header_timeout 10;
        large_client_header_buffers 2 1k;
        keepalive_timeout 5 5;
        send_timeout 10;
        server_tokens off;

        ##
        # Default 404 serverblock
        ##

        server {
           listen 80 default_server;
           listen 443 ssl default_server;
           server_name _;
           return 404;
           include /mnt/config/certificates;
        }

        ##
        # Including all servers
        ##

        include /mnt/config/sites-enabled/*.conf;
}

Voorbeeld server block:
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
# dit block zorgt voor redirect naar https
server {
    server_name voorbeeld.mydomain.com;
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}
# luistert alleen op https
server {
    server_name voorbeeld.mydomain.com;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # Redirect
    location / {
        proxy_pass http://192.168.2.240:3002;
    }

    # Certificates
    include /mnt/config/certificates;

    # Headers
    include /mnt/config/headers;
#    add_header Content-Security-Policy "default-src 'self https: data: blob: 'unsafe-inline'" always;
#    proxy_set_header Host $host;

    # Logging
    access_log /var/log/nginx/voorbeeld.access.log;
    error_log /var/log/nginx/voorbeeld.error.log;

    # Only local access - comment out to allow internet access
    allow 192.168.2.0/24;
    deny all;
}

Certificaten
code:
1
2
3
4
ssl_dhparam /mnt/certificates/dhparams.pem;
ssl_certificate /usr/local/etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/mydomain.com/privkey.pem;
ssl_trusted_certificate /usr/local/etc/letsencrypt/live/mydomain.com/cert.pem;


Headers:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
proxy_hide_header X-Powered-By;
add_header 'Referrer-Policy' 'strict-origin-when-cross-origin' always;
add_header Expect-CT 'max-age=43200' always;
add_header Feature-Policy "geolocation 'none'; camera 'none'; speaker 'none'; vibrate 'none'; microphone 'none'" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header "X-XSS-Protection" "1; mode=block" always;
add_header X-Content-Type-Options "nosniff"  always;
add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
proxy_connect_timeout 1h;
proxy_send_timeout 1h;
proxy_read_timeout 1h;

Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Ik gebruik de Nginx Proxy Manager als Docker container dus ik kan daar geen nginx.conf configureren.
Het bovenste blok zou ik dan moeten aanpassen in mijn Peertube Nginx config file?

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • thijsjek
  • Registratie: Juni 2010
  • Laatst online: 25-02 08:41
Scally schreef op zaterdag 27 november 2021 @ 16:26:
Ik gebruik de Nginx Proxy Manager als Docker container dus ik kan daar geen nginx.conf configureren.
Het bovenste blok zou ik dan moeten aanpassen in mijn Peertube Nginx config file?
Ja het bovenste stuk.

Maar mijn config is gemaakt voor nginx. Die manager maakt het leven een stuk makkelijker zonder zich te moeten verdiepen in nginx / letsencrypt. Dus ik weet niet hoe compatibel het allemaal is.

Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Ik heb 2 gedeeltes waar 'location' in staat, enig idee welke ik moet aanpassen?

server {
listen 80;
listen [::]:80;
server_name mijn.server.nl;

location /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/certbot;
}
location / { return 301 https://$host$request_uri; }

}

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Update, ik heb op beide plekken location aangepast en zelf het location gedeelte met de 'acme-challenge' verwijderd maar nog steeds werkt het niet. 500 Internal Server error.
Op de host staan poort 80 en 443 gewoon open.

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • Faifz
  • Registratie: November 2010
  • Laatst online: 09-09 15:24
Scally schreef op maandag 29 november 2021 @ 20:18:
Ik heb 2 gedeeltes waar 'location' in staat, enig idee welke ik moet aanpassen?

server {
listen 80;
listen [::]:80;
server_name mijn.server.nl;

location /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/certbot;
}
location / { return 301 https://$host$request_uri; }

}
Kun je Peertube direct benaderen zonder NPM? Dus gewoon het IP-adres van Peertube ingeven.

Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Yup. Uiteraard wel met een certificaat foutmelding vanwege het IP adres maar ik kom er wel. Dat ga ik vanavond wel even proberen, tnx.

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol


Acties:
  • 0 Henk 'm!

  • Scally
  • Registratie: Juli 2000
  • Laatst online: 28-02 21:24

Scally

Ik geloof dat ie het doet?

Topicstarter
Werkt nog steeds niet helaas. Ik krijg nu een '502 Bad gateway' melding in de browser. Heb de URL 2x aangepast naar het interne IP adres, voor zowel http als https.

Hieronder mijn config:

server {
listen 80;
listen [::]:80;
server_name 192.168.100.177;

location /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/certbot;
}
location / { return 301 https://$host$request_uri; }

}

upstream backend {
server 127.0.0.1:9000;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name 192.168.100.177;

...Y la tierra se hace mi trono... [Pentium 4 Northwood 2 Ghz, WinXP, 512MB PC133, HITACHI 250 GB@7200RPM] <-- ingesteld in 2001 lol

Pagina: 1