【问题标题】:reverse proxy+dispatcher - what is the easiest way反向代理+调度程序 - 什么是最简单的方法
【发布时间】:2013-03-07 21:57:09
【问题描述】:

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

好吧,我猜上面那句话还不够,下面是详细内容:

在我的 Intranet 中,我有几台服务器,(名称、地址、端口和上下文路径显然是为了简单起见而编造的):

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

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

我需要做的是通过这个端口公开 HR 和 Mail 服务。 我首先想到的是编写两个简单的 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 操作系统也可以) 谢谢!

【问题讨论】:

    标签: reverse-proxy dispatcher


    【解决方案1】:

    花了很长时间,但这里是答案:

    一个好的解决方案是nginx(读作“Engine 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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 2013-06-11
      • 2022-01-24
      • 2012-01-18
      • 2023-03-08
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多