Puncte:0

Rescrierea șirului de interogări Nginx

drapel cn

Am o configurație ca mai jos, dar primesc o eroare 500. Unde ar putea fi aceasta eroare?

servere master din amonte {server 192.168.1.1:8000;}
servere slave din amonte {server 192.168.1.2:8001;}

harta $request_uri $redirect_to {
    servere master „țintă=master”;
    servere de sclavi „target=slave”;
}

Server {
    asculta 80;
        nume_server 192.168.1.10;

       Locație / {
        proxy_pass http://$redirect_to;
    }

}

Când apelez la adresa URL ca mai jos, primesc următoarea eroare.

http://192.168.1.10/app/index.html?target=master

http://192.168.1.10/app/index.html?target=slave

Jurnal Nginx: *2 prefix URL nevalid în „http://”, client: 192.168.1.11, server: 192.168.1.10, cerere: „GET /favicon.ico HTTP/1.1”, gazdă: „192.168.1.10”, referitor: „http ://192.168.1.10/app/index.html?target=master"

Puncte:0
drapel gr

Îți compari $request_uri, care este egal cu /app/index.html?target=master de la exemplul tău, la target=master și tinta=sclav siruri de caractere. Niciuna nu s-a potrivit, deci $redirect_to variabila devine un șir gol. Dacă doriți să verificați dacă $request_uri conţine a target=master sau tinta=sclav subșiruri, puteți utiliza modele regex în interiorul Hartă bloc:

harta $request_uri $redirect_to {
    servere master „~target=master”;
    „~target=slave” servere de sclavi;
}

sau mai bine verificați $arg_target valoarea variabilei:

harta $arg_target $redirect_to {
    master servere;
    sclavi sclavi;
}

Luați în considerare și folosirea unora Mod implicit valoare când nu ţintă argumentul de interogare este specificat în cerere (sau valoarea sa este nevalidă):

harta $arg_target $redirect_to {
    master servere;
    sclavi sclavi;
    servere master implicite;
}

Ultimul poate fi simplificat la

harta $arg_target $redirect_to {
    sclavi sclavi;
    servere master implicite;
}

Sau faceți o verificare preliminară, cum ar fi

harta $arg_target $redirect_to {
    master servere;
    sclavi sclavi;
}
Server {
    asculta 80;
    nume_server 192.168.1.10;

    dacă ($redirect_to = '') {
        returnează 501; # HTTP 501 neimplementat
    }

    Locație / {
        proxy_pass http://$redirect_to;
    }

}

Actualizați

Dacă înțeleg corect întrebarea dvs. suplimentară - cum să încărcați toate elementele din același fișier în amonte ca fișierul HTML principal - puteți încerca să obțineți un nume în amonte din HTTP Referitor valoarea antetului dacă ţintă argumentul de interogare este absent folosind două înlănțuite Hartă blocuri (aici sunt regex intr-adevăr la locul lor):


harta $arg_target $redirect_to {
    master servere;
    sclavi sclavi;
    implicit $by_referer;
}
harta $http_referer $by_referer {
    servere master „~target=master”;
    „~target=slave” servere de sclavi;
}
Server {
    ...
}
MrTux01 avatar
drapel cn
Mulțumesc pentru explicația grozavă. Cum pot scăpa de eroarea 500 pentru fișierele css și js?
Ivan Shatsky avatar
drapel gr
Nu sunt sigur dacă am înțeles corect întrebarea dvs., dacă sunt, verificați actualizarea unui răspuns.

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.