Puncte:0

proxy invers nginx cu cale secundară

drapel in

Am construit o aplicație web care va asculta pe un port și va gestiona solicitările HTTP. De exemplu, dacă îl rulez local la 127.0.0.1:3000. Pot accesa cu http://127.0.0.1:3000/path/within/app pe browserul meu. Aș dori să-l implementez pe unul dintre serverele mele, care este configurat cu nginx pentru a gestiona toate solicitările primite (și TLS) și a le transmite către diferite aplicații (ascultând la http://127.0.0.1:xxx). În mod normal, aș da fiecărei aplicații un subdomeniu diferit (de exemplu, acces aplicația 1 cu app1.example.com și aplicația 2 cu app2.example.com), dar ar fi mai convenabil dacă pot folosi subpath (de exemplu, acces aplicația 1 cu example.com/app1 și aplicația 2 cu example.com/app2). Dar nu sunt sigur cum să-l configurez.

Fișierul meu de configurare actual este ca următorul. Să presupunem că aplicația mea ascultă la 127.0.0.1:3000.

locație ^~ /app1 {
    proxy_set_header X-Real-IP $adresă_la distanță;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Gazdă $http_host;
    proxy_redirect dezactivat;
    proxy_pass http://127.0.0.1:3000/;
}

Aș dori să realizez următoarele.

  1. Când accesez https://example.com/app1, va fi echivalent cu accesarea http://127.0.0.1:3000.
  2. Când accesez https://example.com/app1/path/within/app, va fi echivalent cu acces http://127.0.0.1:3000/path/within/app.

Cu toate acestea, cu fișierul de configurare menționat mai sus, funcționează doar prima parte. Dacă accesez https://example.com/app1/path, aplicația mea se plânge că a fost http://127.0.0.1:3000//path care de fapt sunt accesate și nu știe cum să se descurce //cale.

Aș prefera să nu modific nicio parte a aplicației mele, astfel încât să poată rula independent dacă am decis să-i dau un subdomeniu în viitor și mă așteaptă la o remediere cu modificarea doar a fișierului de configurare nginx, dacă este posibil. În plus, sunt conștient de problema că orice link-uri pe care se poate face clic generate de aplicație va trebui, de asemenea, să gestioneze o cale secundară, dar această aplicație este suficient de simplă încât aceasta nu este o problemă.

Mulțumiri.

Ivan Shatsky avatar
drapel gr
Schimbați-vă locația în `location ^~ /app1/ { ... }` (rețineți slash-ul final). Dacă doriți ca și URI-ul `/app1` să fie funcțional, adăugați `location = /app1 { return 301 /app1/; }` la configurația dvs.
lewisxy avatar
drapel in
Mulțumesc, există modalități de a face `/app1` să funcționeze fără a trimite 301?
Ivan Shatsky avatar
drapel gr
Puteți încerca `location = /app1 { rescrie ^ /app1/ ultima; }`. Cu toate acestea, în unele cazuri, aplicația dvs. poate să nu își poată încărca activele (consultați explicațiile din [this](https://stackoverflow.com/a/70778444/7121513) răspuns) și nu recomand să o faceți.
Puncte:0
drapel us

Încercați următoarea configurație

locație /app1/ {
    proxy_set_header X-Real-IP $adresă_la distanță;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Gazdă $http_host;
    proxy_redirect dezactivat;
    proxy_pass http://127.0.0.1:3000/;
}

locație /app1 {
    returnează 301 /app1/;
}
lewisxy avatar
drapel in
Mulțumesc, funcționează. Cu toate acestea, există modalități de a-l configura astfel încât să nu fie nevoie să trimit 301 când clientul accesează `/app1`? Cu alte cuvinte, aș prefera redirecționarea pe partea serverului decât pe partea clientului, dacă este posibil.
drapel us
Ești sigur că asta vrei? Apoi veți avea conținut duplicat la adresele URL `http://example.com/app1` și `http://example.com/app1/`, ceea ce este o problemă pentru SEO.
lewisxy avatar
drapel in
Aplicația actuală la care lucrez oferă doar API-uri JSON, deci nu există o pagină HTML. Totuși, nu am suficientă experiență pe acest subiect.Care este convenția dacă aplicația mea este un site web real? În general, îl preferăm pe cel cu bare oblice sau nu? De asemenea, cum afectează această alegere parametrii de interogare (cei după `?`), dacă este deloc?
drapel us
Argumentele de interogare sunt independente de componenta cale a unei adrese URL, deci acolo nu contează. În propriile mele proiecte, fac redirecționarea 301 de la `/app1` la `/app1/`, deoarece cel cu slash final este mai ușor de gestionat în diferite locuri.

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.