我正在寻找一种解决方案,可以将面向外部的http://mycompany.com/external/*
重定向到http://internal-host:1234/internal/*
重定向/代理
(星号用作通配符)
好的,我猜上面的句子还不够,所以这里有详细信息:
在我的内联网中,我有几台服务器,(为了简单起见,显然已经编写了名称,地址,端口和上下文路径):
10.10.10.10:1010/hr
20.20.20.20:2020/mail
我的系统只能通过互联网从ip 78.78.78.78访问,这里的限制是我只能使用一个端口(例如8080)。换句话说 - 无论我的问题的解决方案是什么 - 外部地址应该以{{1}}
开头我需要做的是通过此端口公开HR和Mail服务。 我想到的第一件事就是编写两个简单的portlet(或带有两个框架的HTML)并将它们嵌入一个简单的网页78.78.78.78:8080/ 但显然这不起作用,因为portlet会将浏览器重定向到例如10.10.10.10:1010/hr,这在互联网上是看不到的。 所以我的下一个想法是 - 好吧,让我们找一个具有调度功能的反向代理。然后我就可以了
78.78.78.78:8080
“重定向”到内部78.78.78.78:8080/hr
10.10.10.10:1010/hr
“重定向”到内部78.78.78.78:8080/mail
我还希望,如果让我们说在20.20.20.20:2020/mail
上看到邮件服务器未读邮件,也可以从互联网访问未读邮件。
粗略地说 - 我希望
20.20.20.20:2020/mail/unread
*重定向到内部78.78.78.78:8080/mail/
*(星号用作通配符)我真的觉得我错过了这里显而易见的事实,但老实说 - 我花了很长时间研究几个代理人,但我找不到答案。我可能正在寻找错误的单词或其他内容,但我找不到可以配置为将外部路径分配到不同内部路径的反向代理。
所以请 - 如果答案是例如Apache mod_proxy - 请给我一个关于我应该寻找的参数名称的提示。 最后 - 我将在FreeBSD操作系统中运行,但这不是一个强烈要求(其他* nix操作系统也很好) 谢谢!
答案 0 :(得分:1)
花了很长时间,但答案是:
一个好的解决方案是nginx(发音为“引擎X”)。
重新路由所有流量
https://mycompany.com/external/*
来
http://internal-host:1234/internal/*
(星号用作通配符)您需要具有以下配置:
location ~ ^/internal/ {
rewrite ^/internal/(.*)$ /$1 break;
proxy_pass http://internal-host:1234;
}
这种方法可以用于所有其他地址 - 例如人力资源门户,邮件等
最后,为了让您了解 - 以下配置不起作用:
location ~ ^/internal/(.*)$ {
proxy_pass http://internal-host:1234/internal/$1;
}
事实证明,当使用正则表达式时,nginx将始终代理整个URI,因此规则必须是上面的规则(url-rewrite)。