反向代理+调度程序 - 最简单的方法是什么

时间:2013-02-16 20:02:26

标签: reverse-proxy dispatcher

我正在寻找一种解决方案,可以将面向外部的http://mycompany.com/external/*重定向到http://internal-host:1234/internal/*重定向/代理 (星号用作通配符)

好的,我猜上面的句子还不够,所以这里有详细信息:

在我的内联网中,我有几台服务器,(为了简单起见,显然已经编写了名称,地址,端口和上下文路径):

  1. HRServer在地址10.10.10.10:1010/hr
  2. 运行
  3. 在地址20.20.20.20:2020/mail
  4. 运行的MailServer

    我的系统只能通过互联网从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操作系统也很好) 谢谢!

1 个答案:

答案 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)。