Nginx переписывает регулярное выражение с изменением порта

Мой веб-стек состоит из (nginx (порт: 29090) -> tomcat), nginx действует как обратный прокси-сервер, а tomcat размещает 2 веб-приложения
1. Для аутентификации (используя netflix zuul) — работает на порту 29091
2. Сервер API SensorThings — работает на порту 29101
Этот нижеприведенный запрос передается с использованием zuul.route.sensor.url=http://localhost:29090/sensor-internal

Ниже приведен блок nginx.conf

location /sensor-internal/ {
        include cors_support;            
        rewrite ^(/sensor/)(.*)$ SensorThingsServer-1.0/v1.0/$2 break;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        rewrite_log on;

    }

Я хочу заменить URL-адрес
http://localhost:29090/sensor/xxxx(n)/yyyy(m)
to
http://localhost:29101/SensorThingsServer-1.0/v1.0/xxxx(n)/yyyy(m)

См. изменить порт и заменить датчик на STS-1.0/v1.0/
Я считаю, что вышеуказанный блок не будет работать для смены порта. Пожалуйста, направляйте.


person Alberto    schedule 05.09.2017    source источник


Ответы (1)


Вам следует описать отдельную локацию /sensor/ и выполнить там перезапись, так как определённая вами локация /sensor-internal/ не обслуживает /sensor/* запрос.

location /sensor/ {
   rewrite ^/(/sensor/)(.*)$ http://localhost:29101/SensorThingsServer-1.0/v1.0/$2 break;
   rewrite_log on;
}
person Andrey Kopeyko    schedule 05.09.2017
comment
вы можете переместить перезапись за пределы блока, и блок не понадобится - person Tarun Lalwani; 06.09.2017
comment
технически - да, вы можете переместить его в контекст server. Но в этом случае это правило будет проверяться для каждого запроса к этому серверу, что приводит к дополнительной бесполезной, с моей точки зрения, загрузке процессора. Когда вы определяете location, вы четко указываете, какие URI должны проверяться на соответствие этому правилу перезаписи. - person Andrey Kopeyko; 08.09.2017
comment
Спасибо, что поделились ходом мыслей. Буду иметь в виду :-) - person Tarun Lalwani; 08.09.2017
comment
является ошибкой в ​​​​вашем ответе, то есть должен ли localhost: 29101: SensorThingsServer-1.0/ быть localhost: 29101/SensorThingsServer-1.0/? - person AndrewT; 08.06.2018
comment
Спасибо, @AndrewT! Исправил - надеюсь, эта опечатка не мешала моему пониманию идеи. - person Andrey Kopeyko; 09.06.2018