2013-02-16 73 views
1

这将重定向面向外部的http://mycompany.com/external/*重定向/代理到http://internal-host:1234/internal/* (星号作为通配符)反向代理+调度 - 什么是我要寻找一个解决方案的最简单方法

OK,我猜上面这句话是不够的,所以这里是详细信息:

在我的内网我有几个服务器,(姓名,地址,端口和上下文路径显然是编造为简单起见):

  1. HRServe [R在地址上运行10.10.10.10:1010/hr
  2. 邮件服务器运行在地址20.20.20.20:2020/mail

我的系统是从互联网上访问只能从IP 78.78.78.78,这里的约束是,我可以只用一个端口(例如8080)。换句话说 - 无论我的问题的解决方案是什么 - 外部地址应该从78.78.78.78:8080

我需要做的是通过此端口公开HR和邮件服务。 我首先想到的是编写两个简单的portlet(或一个带有两个框架的HTML),并将它们嵌入到一个简单的网页78.78.78.78:8080/ 但显然这不起作用,因为portlet会将浏览器重定向到例如10.10.10.10:1010/hr,这在互联网上是不可见的。 所以我的下一个想法是 - 好的,让我们找到一个具有调度功能的反向代理。然后我就能做出

  • 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/ *重定向到内部20.20.20.20:2020/mail/ *(星号作为通配符)

我真的觉得我是缺少在这里显而易见的,但说实话 - 我花了很长时间研究几个代理,但我没有找到答案。我可能正在寻找错误的单词或其他内容,但是我找不到可以配置为将外部路径分派到不同内部路径的反向代理。

那么请 - 如果答案是例如Apache mod_proxy - 请给我一个关于我应该查找的参数名称的提示。 最后 - 我将在FreeBSD操作系统中运行瘦,但这不是一个强有力的要求(其他* nix操作系统也很好) 谢谢!

回答

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永远PROXYPASS整个URI使用正则表达式时,这样该规则必须是上面的一个(这是URL重写)。

相关问题