У меня OpenNMS работает на хосте B-beta со следующим URL:
http://b-beta:8980/opennms
Я хотел бы использовать NginX, чтобы скрыть этот путь, доступный с хоста a-alpha следующим образом:
https://a-alpha/omber/nms
Итак, я предполагаю, что мне нужно переписать запросы, отправляемые на бэкэнд, чтобы изменить путь с / omber / nms на / opennms, но без того, чтобы он был видим для пользователя - это что-то, что можно сделать?
HTTPS уже работает нормально.
Первый шаг - это прокси-запросы от Nginx на другой ваш сервер. На а-альфе:
location /ombre/nms {
proxy_pass http://b-beta:8980/opennms
}
Отсюда остальные конфигурации очень зависят от работы OpenNMS (с которой я не знаком).
Следующая часть посвящена редиректам. Если запросы поступают со стороны клиента (например, ваши формы POST на URL-адрес на b-beta или у вас есть ссылки, указывающие на b-beta), вам необходимо разрешить их отдельно от Nginx. Имейте в виду, что браузер не знает прокси, поэтому он будет отправлять запросы на сервер без изменений.
Если вы посмотрите на страницу входа в OpenNMS (например, живая демонстрация). Форма входа отправляет POST на opennms/j_spring_security_check
. Успешный вход в систему приводит к:
opennms
, с последующимopennms/frontPage.htm
с последующимopennms/index.jsp
.Используя Nginx, вы не можете (легко) изменить путь POST формы (хотя это, вероятно, вариант конфигурации OpenNMS), но вы можете изменить перенаправления, которые возвращаются браузеру. Следует учитывать некоторые директивы:
proxy_redirect
: Если вам нужно изменить перенаправление (т.е. заголовок местоположения), возвращаемое в браузер
proxy_redirect http://b-beta:8980/opennms/ http://a-alpha/ombre/nms/;
Это должно быть эквивалентно proxy_redirect default
если содержится в блоке местоположения выше.
rewrite ... break
: Если вам нужно изменить путь, который отправляется opennms (разрыв означает, что будет обработан только текущий блок местоположения).
rewrite /ombre/nms/a/(.*) /opennms/b/$1 break;
proxy_set_header
: если вам нужно изменить некоторые заголовки, отправляемые на бэкэнд.
По умолчанию Nginx устанавливает для заголовка Host значение $proxy_host
. Если вы настроили OpenNMS на b-beta так, как если бы он работал на a-alpha (например, сообщите ему, что домен принадлежит a-alpha, установите блоки сервера, соответствующие a-alpha, и т. Д.), Тогда вам нужно будет передать Заголовок хоста, полученный a-alpha вместо того, чтобы позволить Nginx изменить его:
proxy_set_header Host $host;