Puncte:0

Proxy-ul invers NGINX nu funcționează cu swagger-ui-express

drapel in

Folosesc NGINX pentru proxy_pass toate cererile cu prefix /auth/ către un server api nodejs la localhost:3000.

Am acest singur fișier de configurare /etc/nginx/sites-enabled/default3.conf:

Server {
    
    locație /auth/ {
        rescrie /auth/(.+) /$1 pauză;
        proxy_pass http://127.0.0.1:3000;
        proxy_redirect dezactivat;
        proxy_set_header HOST $gazdă;
    }


}

Funcționează bine pentru majoritatea solicitărilor mele (în loc de GET http://localhost:3000/logout, OBȚINE http://localhost/auth/logout ar funcționa conform așteptărilor), cu excepția acestei solicitări GET http://localhost/auth/docs, care ar trebui să se mapeze la http://localhost:3000/docs dar am primit o redirectionare:

HTTP/1.1 301 mutat permanent
Server: nginx/1.18.0 (Ubuntu)
Data: miercuri, 15 decembrie 2021 01:59:02 GMT
Tip de conținut: text/html; set de caractere=UTF-8
Lungimea conținutului: 175
X-Powered-By: Express
Acces-Control-Permite-Origine: *
Politica de securitate a conținutului: default-src 'none'
X-Content-Type-Options: nosniff
Locație: /docs/

apoi un 404 NOT FOUND în schimb:

HTTP/1.1 404 Nu a fost găsit
Server: nginx/1.18.0 (Ubuntu)
Data: miercuri, 15 decembrie 2021 03:20:26 GMT
Tip de conținut: text/html
Transfer-Codificare: fragmentat
Conexiune: păstrați-vă în viață
Codificarea conținutului: gzip

Se pare că atunci când GET http://localhost/auth/docs, cererea a lovit serverul meu nodejs, dar apoi a fost redirecționată înapoi la http://localhost/docs, dar cum ar putea fi posibil acest lucru? Inca pot GET http://localhost:3000/docs fara probleme.

ACTUALIZAT

http://localhost:3000/docs este locul în care servesc Swagger UI pentru API-ul serverului, folosind modulul npm swagger-ui-express.

drapel in
Cel mai probabil, serverul dvs. nodejs nu este configurat cu adresa URL de bază corectă și generează redirecționări defecte.
xceeded avatar
drapel in
da, ai dreptate. A fost o problemă cu aplicația mea nodejs, adică modulul „swagger-ui-express”. Încă încerc să o repar.
Puncte:0
drapel in

Problema

  • Problema constă în modul swagger-ui-express pe care serverul meu nodejs îl folosește pentru a servi documentele API.
  • L-am configurat să servească /docs iar modulul va face redirecționări 301 pentru a face cererea exact $HOST/docs, pentru HOST este oricare ar fi gazda cererii (localhost:3000, sau gazdă locală).
  • Deci, atunci când sunt puse în spatele proxy invers NGINX așa cum am făcut mine, fiecare GET http://localhost/auth/docs ar lovi serverul meu nodejs, dar va fi redirecționat către http://localhost/docs cum am spus la punctul 2.

Soluția

  • Configurați NGINX pentru a face un alt proxy_pass atunci când cererea se potrivește /docs/.
    locație /docs/ {
        proxy_pass http://127.0.0.1:3000/docs/;
    }
  • Ai grija că URI-ul care este transmis are o bară oblică, deoarece modulul swagger-ui-express se așteaptă la acel slash final. In caz contrar /auth/docs va fi redirecționat către /docs/ și /docs/ va fi redirecționat către /auth/docs din nou (buclă infinită până la eroare). Deși este în regulă să eliminați bara oblică finală atât în ​​potrivirea locației, cât și în adresa URL a trecerii proxy.

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.