Puncte:0

Căi multiple în Nginx

drapel cn

Încerc nginx pentru prima dată și îl rulez local. Am reușit să-mi ridic serviciile, dar am o întrebare nedumerită, deoarece rulez un microserviciu și în timpul upgrade-ului vreau să pot bloca doar un anumit serviciu.

Acum, fiecare serviciu are o cale de ex

\api\v1\portofel \api\v1\card

Problema pe care o am este că atât portofelul, cât și calea cardului sunt în același serviciu.

Dacă am căi diferite, ar trebui să dublez sau există o modalitate de a le face să funcționeze mai bine?

Aici este fișierul meu de conf

lucrător_procese 4;

evenimente { worker_connections 1024; }
http {

    Server {

        asculta 80;
        set de caractere utf-8;

        locație ~ ^/api/v1/user {
            rescrie ^/api/v1/user/(.*) /$1 pauză;
            proxy_pass http://user-service:3001;
            proxy_http_versiunea 1.1;
            proxy_set_header Actualizare $http_upgrade;
            proxy_set_header Conexiune „Actualizare”;
            proxy_set_header Gazdă $gazdă;
            proxy_cache_bypass $http_upgrade;
        }

        locație /api/v1/wallet/ {
            # rescrie /api/v1/wallet/(.*) /$1 pauză;
            proxy_pass http://wallet-service:3007/api/v1/wallet/;
            proxy_http_versiunea 1.1;
            proxy_set_header Actualizare $http_upgrade;
            proxy_set_header Conexiune „Actualizare”;
            proxy_set_header Gazdă $gazdă;
            proxy_cache_bypass $http_upgrade;
        }

        locație /api/v1/card/ {
            # rescrie /api/v1/wallet/(.*) /$1 pauză;
            proxy_pass http://wallet-service:3007/api/v1/card/;
            proxy_http_versiunea 1.1;
            proxy_set_header Actualizare $http_upgrade;
            proxy_set_header Conexiune „Actualizare”;
            proxy_set_header Gazdă $gazdă;
            proxy_cache_bypass $http_upgrade;
        }

    }


}
drapel in
Care este intrebarea? Dacă un server upstream nu este disponibil, nginx returnează o eroare de proxy, indiferent în ce locație se întâmplă...
King avatar
drapel cn
Întreb dacă un fel de wild card poate fi acceptat, astfel încât să nu dublez locația doar cu căi diferite.
Puncte:0
drapel us

Puteți utiliza următoarea configurație:

locație /api/v1/user {
    ...
}

locație ~ ^/api/v1/(portofel|card)/$ {
    proxy_pass http://wallet-service:3007/api/v1/$1/;
    ...
}

Aici folosim captura de expresii regulate pentru a introduce componenta cale $1 variabilă și apoi utilizați-o în proxy_pass destinaţie.

Dacă doriți să transmiteți restul adresei URL prin proxy_pass, atunci aveți nevoie de o a doua captură:

locație ~ ^/api/v1/(portofel|card)/(.*)$ {
    proxy_pass http://wallet-service:3007/api/v1/$1/$2;
    ...
}
King avatar
drapel cn
a doua sugestie returnează `nginx-proxy_1 | 2022/03/06 13:11:48 [eroare] 32#32: *4 nu a fost definit niciun rezolutor pentru a rezolva serviciul portofel, client: 172.20.0.1, server: , cerere: „GET /api/v1/card/health HTTP /1.1", gazdă: "localhost" nginx-proxy_1 | 172.20.0.1 - - [06/Mar/2022:13:11:48 +0000] „GET /api/v1/card/health HTTP/1.1” 502 157 „-” „Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, ca Gecko) Versiunea/15.1 Safari/605.1.15"`
King avatar
drapel cn
Primul îmi returnează și eroarea 502.
drapel us
Trebuie să definiți soluții de nume cu directiva `resolver` în nginx dacă doriți să utilizați nume pentru serviciile dvs. de backend. Alternativa este utilizarea adreselor IP.

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.