2013-02-16 75 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重寫)。

相關問題