nginx proxy_pass utilizzando la sottocartella


11

ok, questo compito dovrebbe essere semplice ma non riesco proprio a farlo funzionare. Vorrei avere una sottocartella dopo il mio nome di dominio (in realtà dopo l'IP di quel nome di dominio), che reindirizza a una porta specifica sullo stesso server. In sostanza, voglio sbarazzarmi di dover usare molte porte.

Ecco la mia configurazione di nginx per questo

server {
    listen 80;

    index index.html index.htm index.nginx-debian.html index.php;

    server_name aaa.bbb.ccc.ddd;

    location ^~ /app2 {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://aaa.bbb.ccc.ddd:8001;
    }
}

Quindi, accedendo a aaa.bbb.ccc.ddd / app2, vorrei che questo si risolvesse in http: //aaa.bbb.ccc.ddd: 8001 .

Questo può essere probabilmente complicato. Cosa mi sto perdendo qui?

Grazie Pat


Intendi "reindirizzamenti a una porta" o "proxy a una porta"? Sono abbastanza diversi. La tua domanda non è chiara, forse potresti ampliare il tuo caso d'uso incluso il client.
Tim

Risposte:


12

Dato che hai etichettato questo come una domanda di proxy inverso, suppongo che tu voglia delegare la richiesta in modo che l'utente veda solo l' http://aaa.bbb.ccc.ddd/app2URL nel suo browser.

È possibile modificare il locationblocco in questo modo:

location ~/app2(.*)$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://aaa.bbb.ccc.ddd:8001$1;
}

Qui catturiamo la parte URI dopo /app2a $1variabile e la usiamo nella proxy_passdirettiva.


Grazie. Quel tipo ha fatto il trucco. aaa.bbb.ccc.ddd: 8001 viene visualizzato solo parzialmente. Ci sono websocket su quella pagina e molti script java. Immagino che sia perché proxy la porta e non la inoltro come indicato sopra da Tim. Questo è effettivamente possibile ottenere usando solo nginx?
p84,

Che aspetto hanno gli URL delle risorse nella aaa.bbb.ccc.ddd:8001pagina? Molto probabilmente è necessario correggere gli URL per contenere la /app2parte.
Tero Kilkanen,

È davvero solo un websocket lì (che mostra alcuni dati radar, automobilistico ...). Non c'è segno di "app2" nel codice sorgente.
p84,

Va bene, si. Per chiamare il websocket JS usa "var ws = new WebSocket ('ws: //' + location.host + '/ ws');". location.host ora manca il numero di porta, il che rende il tutto non funziona più.
p84,

Ok, quindi sembra che una volta che chiamo aaa.bbb.ccc.ddd / app2 lo richieda per utilizzare internamente aaa.bbb.ccc.ddd: 8001. Un'altra opzione è quella di cambiare tutto lo script java. Il ragionamento è che voglio usare nginx per darmi una "soluzione a una porta" ma dopo aver effettuato l'accesso (ad es. Tramite http // aaa.bbb.ccc.ddd / app2), internamente, ne avrei bisogno torna a aaa.bbb.ccc.ddd: 8001. È possibile?
p84,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.