Comment éviter que nginx remplace% 20 par des espaces lors de l’utilisation en tant que proxy (proxy_pass)?

J’utilise un nginx comme proxy pour un serveur Apache.

Voici ma config:

location ~ ^/subsite/(.*)$ { proxy_pass http://127.0.0.1/subsite/$1?$query_ssortingng; } 

le problème est que si j’envoie une demande avec% 20 comme mywebsite.com/subsite/variable/value/title/Access%20denied/another/example

le% 20 est remplacé par un espace et apache ne se soucie pas de toute la fin de la requête après Access / title / Access

Une idée ?

J’ai pu résoudre un problème similaire – nous avons une API qui nécessite que les termes de recherche fassent partie du chemin de l’URL. Passer directement la sortie à la directive proxy_pass a provoqué l’envoi d’un 502 même si la requête était correctement encodée en URL.

Voici la solution que nous avons trouvée:

 location ~ /api/search(/.*) { set $query $1; proxy_pass http://127.0.0.1:3003$query; } 

La directive “set” semble garder l’encodage de l’url intact (ou ré-encode à partir de ce que la regex transmet en 1 $).