Puncte:0

NginX: Serviți aplicația sub calea secundară

drapel tn

Am mai multe aplicații cu o singură pagină care rulează fiecare în propriul container sub directorul principal, ceea ce este destul de simplu.

Acum aș dori să trimit către acele aplicații sub aceeași intrare dns folosind căi diferite, de exemplu:

domain.com -> defaultAppContainer
domain.com/app1 -> container1
domain.com/app2 -> container2

Nu am opțiunea de a rescrie căile în timpul rutării, așa că aș dori ca Nginx să asculte calea /app1 sau /app2 respectiv și de a servi corect aplicațiile de acolo. În prezent, tot ce am încercat are ca rezultat o eroare.

Am luat in calcul doua posibilitati:

  • Proxy calea secundară către acasă folosind ceva de genul
    locație /app1 {
      proxy_pass $gazdă/;
    }
    
    Dar acest lucru nu pare să funcționeze pentru frontend, presupun că unele căi sunt încurcate în cerere.
  • Servirea tuturor fișierelor sub traseul secundar, de ex.:
    locație /app1 {
      rădăcină alias /usr/share/nginx/html/;
    }
    
    Unde aliasul indică directorul de bază al aplicației web construite. Asta îmi dă o CONN_RESET eroare.

De asemenea, pur și simplu redirecționarea cu un 307 nu este o opțiune, deoarece aceasta ar duce la apelarea clientului la adresa URL de bază fără cale, care este apoi direcționată către aplicația implicită.

Puncte:1
drapel gr

În general, rularea aplicației sub un prefix URI atunci când aplicația în sine nu se așteaptă că este un lucru complicat, iar singura soluție de încredere ar fi să repari/configurați aplicația, făcând-o să genereze toate legăturile de active/rute fie relative, fie inclusiv prefixul acesteia. este desfășurat sub. Aproape toate soluțiile existente sunt de a rescrie răspunsurile aplicației „din mers”, înlocuind linkurile generate cu cele noi. Un fel de răspuns generic este Aici, pot fi găsite câteva considerații suplimentare Aici.

Cu toate acestea, dacă este cu adevărat un SPA, să spunem o aplicație React care folosește ceva de genul HashRouter Decat BrowserRouter, o soluție bazată pe rescrierea condiționată conform cererii Referitor Antetul HTTP este posibil:

Server {
    ...
    dacă ($http_referer ~ ^https?://yourdomain.com/app1/) {
        rescrie ^ /app1$uri;
    }
    dacă ($http_referer ~ ^https?://yourdomain.com/app2/) {
        rescrie ^ /app2$uri;
    }
    ...
    locație /app1/ {
        proxy_pass http://container1/;
    }
    locație /app2/ {
        proxy_pass http://container2/;
    }
}

Toate barele oblice folosite aici sunt folosite intenționat, eliminarea oricăreia dintre ele va sparge soluția!

Acest lucru nu se aplică pentru nimic altceva decât SPA (inclusiv aplicațiile care utilizează rutarea „virtuală” bazată pe API-ul istoric al browserului HTML5), deoarece logica de rescrire va fi întreruptă după prima tranziție de la o pagină la alta.

masus04 avatar
drapel tn
Multumesc mult pentru raspuns! Toate aplicațiile sunt implementate folosind una dintre următoarele: react, vuejs sau Flutter, dar aici se termină garanțiile și nu am control asupra implementărilor exacte. De asemenea, care este funcția exactă a rescrierilor?

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.