我在主机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会导致:
opennms ,后面跟着 opennms/frontPage.htm后面 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;