使用Nginx隐藏后端的路径

我在主机B-beta上运行OpenNMS,其URL如下:

http://b-beta:8980/opennms

我想使用Nginx来隐藏这个可以从主机a-alpha访问的路径,如下所示:

https://a-alpha/omber/nms

所以我想我需要的是重写发送到后端的请求以将路径从/ omber / nms更改为/ opennms – 但是如果用户不可见 – 这是可以做到的吗?

HTTPS工作正常.

最佳答案
第一步是将来自Nginx的请求代理到您的其他服务器.在a-alpha上:

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

从这里开始,其余配置非常依赖于OpenNMS的功能(我不熟悉).

下一部分是处理重定向.如果请求来自客户端(例如,您的表单POST到b-beta上的URL或者您的链接指向b-beta),那么您需要从Nginx单独解决这些请求.请记住,浏览器不知道代理 – 因此它会在不修改服务器的情况下发送请求.

如果你看一下OpenNMS登录页面(例如,live demo).登录表单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.如果您在b-beta上设置OpenNMS,就像它在a-alpha上运行一样(例如告诉它该域是a-alpha,安装服务器阻止匹配a-alpha等),那么你需要通过主机头由a-alpha接收而不是让Nginx修改它:

proxy_set_header Host $host;

相关文章

一、Linux下Nginx的安装 1.去官网 http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...