Puncte:0

Același server_name cu aplicații diferite conectate ca blocuri de locații separate în nginx

drapel bq
s.k

Este posibil să „conectați” diferite servicii web (expuse din diferite containere docker) într-un același server nginx?

Iată un exemplu simplu pentru a vă face o idee generală:

Server {
    asculta 80;
    asculta [::]:80;

    client_max_body_size 10M;
    set de caractere utf-8;

    nume_server my.server.org;

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

    Locație / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8081/;
    }
    locație /static/ {
        include proxy_params;
        includ /etc/nginx/mime.types;
        alias /var/www/app/static/;
    }
    locație ^~ /app2/ {
        include proxy_params;
        proxy_pass http://127.0.0.1:8082;
    }
    locație ^~ /app3/ {
        include proxy_params;
        proxy_redirect dezactivat;
        proxy_set_header Gazdă $http_host;
        proxy_pass http://127.0.0.1:8083;
    }
}

Unde Locație / este rădăcina unei prime aplicații împreună cu fișierele sale statice din următorul bloc de locație.
Această primă aplicație rulează la http://my.server.org/.

Aș dori să accesez alte două aplicații la http://my.server.org/app2/ și http://my.server.org/app3/ păstrând același nume de server my.server.org.
Aceste aplicații sunt legate de cea principală, dar sunt total independente, adică sunt servite din alte compoziții docker, cu porturile expuse la 8082 și respectiv 8083.

Este posibil să se realizeze o sarcină atât de simplă într-un unic Server bloc?

Pentru moment, am primit 404 când am ajuns la celelalte două adrese URL.

Practic, vreau să mapez acele URL-uri + porturi de lucru și toate elementele lor secundare către locații numite:

http://my.server.org:8081/.... -> http://my.server.org/...
http://my.server.org:8082/.... -> http://my.server.org/app2/....
http://my.server.org:8083/.... -> http://my.server.org/app3/....

EDITAȚI | ×:
fie asta:

    locație /app3/ {
        dacă ($http_referer ~ "^$scheme://$http_host/app3/") {
            rescrie ^/app3/(.*) $scheme://$http_host/app3/$1 redirecționare;
        }
        include proxy_params;
        proxy_redirect dezactivat;
        proxy_set_header Gazdă $http_host;
        proxy_pass http://127.0.0.1:8083;
    }

sau asta:

    locație ~*/app3/(.*)$ {
        include proxy_params;
        proxy_redirect dezactivat;
        proxy_set_header Gazdă $http_host;
        proxy_pass http://127.0.0.1:8083/$1;
    }

„funcționează” la fel, dar nu perfect, deoarece au mai rămas două probleme:

  1. este difuzat numai HTML brut (de exemplu, fără stil: „502 gateway bad” pe fișierele CSS, de exemplu)
  2. link-urile din cadrul paginilor indică, de ex. http://my.server.org/subfeature/subitem în loc de http://my.server.org/app3/subfeature/subitem. Prin urmare, le „lipsește”. /app3 prefix și nu știu cum să-l adaug dacă nu este prezent acolo unde ar trebui să fie de fapt.
Puncte:0
drapel za

Aceasta este o sarcină tipică, dar ați uitat două lucruri:

  • cautând pe google întrebarea dvs.
  • adăugând rescrie clauze în fiecare dintre Locație {} blocuri.
s.k avatar
drapel bq
s.k
Problema este că fișierele statice sunt difuzate automat la nivel de rădăcină, fără prefixul `/app3`, prin urmare, pentru că nu sunt „conștienți” de acea locație din interiorul containerului docker din care provin, nu vor intra niciodată în acel ` blocul de locație /app3` și calea lor de căutare va fi implicit cea a lui nginx. Nu știu dacă sarcina este tipică, dar nu pare rezolvabilă în nginx. :/

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.