Назад | Перейти на главную страницу

Скрыть путь к бэкэнду с помощью Nginx

У меня 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. Успешный вход в систему приводит к:

  • 302 редирект на opennms, с последующим
  • 302 редирект на opennms/frontPage.htm с последующим
  • 302 редирект на 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;