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.