Disabilitazione della decodifica di URL in proxy nginx

Quando sfoggo a questo URL: http://localhost:8080/foo/%5B-%5D server ( nc -l 8080 ) lo riceve come-è:

 GET /foo/%5B-%5D HTTP/1.1 

Tuttavia, quando proxy questa applicazione tramite nginx (1.1.19):

 location /foo { proxy_pass http://localhost:8080/foo; } 

La stessa richiesta inviata tramite port nginx viene inoltrata con il path decodificato:

 GET /foo/[-] HTTP/1.1 

Le parentesi quadre decodificate nel path GET stanno causando gli errori nel server di destinazione ( HTTP Status 400 – Carattere illegale nel path … ) quando arrivano non salvati.

C'è un modo per distriggersre la decodifica URL o codificarlo in modo che il server di destinazione riceva lo stesso path quando viene eseguito tramite nginx? Alcune regole di riscrivere URL intelligente?

One Solution collect form web for “Disabilitazione della decodifica di URL in proxy nginx”

Citando Valentin V. Bartenev (che dovrebbe ricevere il credito completo per questa risposta):

Un preventsvo dalla documentazione :

  • Se il proxy_pass è specificato con URI , quando si passa una richiesta al server, una parte di un URI di richiesta normalizzata corrispondente alla posizione viene sostituita da un URI specificato nella direttiva

  • Se il proxy_pass è specificato senza URI , l' URI di richiesta viene passata al server nella stessa forma inviata da un client durante l'elaborazione di una richiesta originale

La configuration corretta nel tuo caso sarebbe:

 location /foo { proxy_pass http://localhost:8080; } 
Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.