Îț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 {
    ...
}