J'ai un nginx proxy_pass
configuration pour transmettre chaque demande sur /api
jusqu'à un backend Tomcat REST. Ce service renvoie dans certains cas un en-tête Location
qui varie en fonction du type de demande, par exemple Location: http://foo.bar/baz/api/search/1234567
- la partie baz
est due à son hébergement sur Tomcat.
Ma configuration actuelle réécrit le foo.bar
Nom d'hôte correctement, mais laisse la partie baz
intacte. Je voudrais supprimer cela, mais les options proxy_pass semblent se limiter à effacer ou à définir une nouvelle valeur pour l'en-tête.
Existe-t-il un moyen de modifier dynamiquement les en-têtes avant de les transmettre au client, en utilisant un substitut d'expression régulière, par exemple? Voici ma configuration nginx:
location /api {
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_redirect off;
proxy_pass http://foo.bar:8080/baz/api;
}
Vous pourrez peut-être utiliser regexp pour le modifier mais une meilleure façon est d'utiliser une redirection proxy:
proxy_redirect http://foo.bar/baz/ /;
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
En-têtes de n'importe quel emplacement pour foo.bar/baz/
ira à /
Si vous souhaitez simplement rediriger /baz/api
, ça marchera aussi.
Si des redirections ajoutent également le port, vous devrez ajouter http://foo.bar:8080/baz/
également (redirection séparée).
J'espère que cela t'aides!