我在主机 B-beta 上运行 OpenNMS,其 URL 如下:
http://b-beta:8980/opennms
Run Code Online (Sandbox Code Playgroud)
我想使用 NginX 来隐藏可从主机 a-alpha 访问的路径,如下所示:
https://a-alpha/omber/nms
Run Code Online (Sandbox Code Playgroud)
所以我想我需要的是重写发送到后端的请求以将路径从 /omber/nms 更改为 /opennms - 但它对用户不可见 - 这是可以完成的事情吗?
HTTPS 已经可以正常工作了。
第一步是将来自 Nginx 的请求代理到您的其他服务器。在α-α上:
location /ombre/nms {
proxy_pass http://b-beta:8980/opennms
}
Run Code Online (Sandbox Code Playgroud)
从这里开始,其余的配置非常依赖于 OpenNMS(我不熟悉)的功能。
下一部分是处理重定向。如果请求来自客户端(例如,您的表单 POST 到 b-beta 上的 URL 或者您有指向 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/;
Run Code Online (Sandbox Code Playgroud)
这应该等同于proxy_redirect default
包含在上面的位置块中。
rewrite ... break
:如果需要修改发送到opennms的路径(break意味着只处理当前位置块)。
rewrite /ombre/nms/a/(.*) /opennms/b/$1 break;
Run Code Online (Sandbox Code Playgroud)
proxy_set_header
:如果您需要修改一些发送到后端的标头。
默认情况下,Nginx 会将 Host 标头设置为$proxy_host
. 如果您在 b-beta 上设置 OpenNMS,就像它在 a-alpha 上运行一样(例如告诉它该域是 a-alpha 的域,设置服务器块匹配 a-alpha 等),那么您将需要传递主机标头由 a-alpha 接收,而不是让 Nginx 修改它:
proxy_set_header Host $host;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19243 次 |
最近记录: |