Изменение заголовка местоположения с помощью прокси-сервера nginx

у меня есть nginx в proxy_pass настройка для передачи каждого запроса на /api через серверную службу Tomcat REST. Эта служба в некоторых случаях возвращает Location заголовок, который зависит от типа запроса, например,Location: http://foo.bar/baz/api/search/1234567 -- the baz часть из-за того, что она размещается на Tomcat.

моя текущая конфигурация переписывает foo.bar имя хоста правильно, но оставляет baz часть нетронутой. Я хотел бы удалить это, но параметры proxy_pass, похоже, ограничены очисткой или установка нового значения для заголовка.

есть ли способ динамически изменять заголовки перед передачей клиенту, например, с помощью замены регулярного выражения? Это моя конфигурация 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;
}

1 ответов


вы можете использовать regexp для его изменения, но лучший способ - использовать перенаправление прокси:

proxy_redirect http://foo.bar/baz/ /;

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

любые заголовки местоположения для foo.bar/baz/ пойдет /

если вы просто хотите перенаправить /baz/api, это тоже сработает.

если какие-либо перенаправления также добавляют порт, вам нужно добавить http://foo.bar:8080/baz/ также (отдельный редирект).

Надежда это помогает!