Reindirizzare un sottotraccia su un host esterno con Nginx


13

Devo creare una mappa abbastanza semplice in Nginx reindirizzando un sottotraccia verso un altro server che si trova nella stessa sottorete.

  • Server Nginx: 192.168.0.2
  • Server Tomcat: 192.168.0.3:8443

Ho provato a inserirlo nella sezione server

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

ma tutto quello che ottengo accedendo a http://www.myservice.com/tomcatapi/ è una pagina di errore 500 e nel file di registro nginx ho questo errore:

    the rewritten URI has a zero length

Cosa mi manca in questo conf?

Risposte:


12

Diamo un'occhiata alla tua riga di riscrittura:

rewrite /tomcatapi/(.*) $1 break;

Stai prendendo il bit tra parentesi (cioè tutto dopo /tomcatapi/), a cui viene assegnato $1e lo usi come unico contenuto del tuo URI riscritto.

Nel tuo esempio, non c'è nulla dopo /tomcatapi/, quindi la riscrittura finisce vuota e questo è ciò di cui nginx si lamenta.

Se si modifica la regola di riscrittura in

rewrite /tomcatapi/(.*) /$1 break;

allora finirai sempre con almeno /nell'output di riscrittura.


Grazie per la tua risposta, comunque ho aggiunto "/" ma ora accedendo all'URL il browser è bloccato nello stato di caricamento e nel file di registro vedo ora un errore diverso: upstream non ha inviato alcuna intestazione HTTP / 1.0 valida durante la lettura dell'intestazione di risposta da upstream
carlo.polisini,

Cosa dicono i log sul tuo server Tomcat?
Flup

Ho trovato l'errore, l'errore era che l'app era disponibile solo su https e non su http! Quindi la sintassi è stata subito dopo la correzione, ho appena sostituito http con https per farlo funzionare.
carlo.polisini,
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.