用Nginx隐藏后端

我在主机B-beta上运行OpenNMS,并使用以下URL:

http://b-beta:8980/opennms 

我想用NginX来隐藏这个path可以从主机a-alpha这样访问:

 https://a-alpha/omber/nms 

所以我想我需要的是重写请求发送到后端更改path从/ omber / nms到/ opennms – 但没有它是可见的用户 – 是可以做的事情?

HTTPS已经正常工作。

第一步是将来自Nginx的请求代理到其他服务器。 在阿尔法:

 location /ombre/nms { proxy_pass http://b-beta:8980/opennms } 

从这里,其余的configuration非常依赖于OpenNMS的function(我不熟悉)。

下一部分是处理redirect。 如果请求来自客户端(例如,您的表单POST到b-beta上的URL或者您有指向b-beta的链接),那么您需要从Nginx中分别parsing这些请求。 请记住,浏览器是不知道的代理 – 所以它会发送请求,而无需修改服务器。

如果你看看OpenNMSlogin页面(例如, 现场演示 )。 login表单POST到opennms/j_spring_security_check 。 成功login会导致:

  • 一个302redirect到opennms ,后面跟着
  • 一个302redirect到opennms/frontPage.htm后面
  • 一个302redirect到opennms/index.jsp

使用Nginx,你不能(很容易)改变表单POST的path(可能是一个OpenNMSconfiguration选项),但你可以改变浏览器返回的redirect。 有一些指令要考虑:

proxy_redirect :如果你需要修改redirect(即位置标题)返回给浏览器

 proxy_redirect http://b-beta:8980/opennms/ http://a-alpha/ombre/nms/; 

如果包含在上面的位置块中,这应该等同于proxy_redirect default

rewrite ... break :如果你需要修改发送到opennms的path(break意味着只有当前的位置块将被处理)。

 rewrite /ombre/nms/a/(.*) /opennms/b/$1 break; 

proxy_set_header :如果你需要修改一些发送到后端的头文件。

默认情况下,Nginx会将Host头设置为$proxy_host 。 如果你在b-beta上设置OpenNMS,就好像它运行在a-alpha上一样(例如告诉它域名是a-alpha,设置服务器块匹配a-alpha等),那么你需要通过主机头由一个alpha接收,而不是让Nginx修改它:

 proxy_set_header Host $host;