2017-07-05 68 views
0

我有應用程序託管在tomcat端口8050下; mydomain:8050。現在,我希望擁有友好的網址,例如mydomain.com用於訪問mydomain:8050,而不需要客戶端在URL中看到端口號。客戶應始終看到mydomain.com,應將其內部解決爲mydomain:8050重寫到其他服務器

我有端口80上運行的IIS服務器。我創建了一個網站,只是使用重寫選項,可以解析爲mydomain:8050。它沒有與我所用的模式工作

模式:((?:[^\/\n]|\/\/)+)(.*) 重寫URL:{R:1}:8050{R:2}

然後我安裝在端口90用於重定向Apache HTTP服務器的IIS站點重定向的URL mydomain:90$S$Q然後在Apache中使用重寫將其內部重定向到mydomain:8050。這有效的時候我有一個查詢字符串,就像mydomain.com/queryString,但是如果我只輸入mydomain.com就不起作用。我可以看到它重定向到mydomain:90並在沒有任何重寫規則正在執行的情況下停在那裏。這也將URL更改爲mydomain:90,客戶可以看到它。

我的要求是,當用戶輸入mydomain.com它應該內部解決mydomain:8050(與查詢字符串,如果有的話),沒有客戶端看到它。我有IIS運行在端口80和Apache運行在端口90.我怎樣才能實現這一目標?我確信這可以在IIS的重寫規則中處理,但我不知道如何做到這一點。

回答

1

重寫到另一臺服務器基本上是代理。我們需要的是在IIS中 反向代理設置基本上代理所有請求 從http://example.comhttp://example:8050/(or更好 http://localhost:8050

  • 確保已在IIS上
  • 創建一個反向安裝ARR模塊代理規則這樣
<rule name="ReverseProxyInboundRule1" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
    <add input="{CACHE_URL}" pattern="^(https?)://" /> 
    </conditions> 
    <action type="Rewrite" url="{C:1}://mydomain:8050/{R:1}" /> 
</rule> 

請注意,由於Apcahe和IIS都在同一臺服務器上,因此可以使用localhost:8050作爲後端代理。

編輯:

此外,如果您有任何重定向來從後端代理回來,你不想重定向位置頭部來了,你可以做到這一點「以應對頭反向rewritehost」取消選中在應用程序請求路由

  • 選擇在IIS管理器中
  • 轉到應用程序請求路由緩存
  • 氯服務器節點在服務器代理設置ICK
  • 取消 「響應頭反向rewritehost」

Reverse rewrite host in response headers

+0

我想這一點,但我沒有看到它改寫成'MYDOMAIN:8050'。它訪問'mydomain.com'時會出錯。 – Maz

+0

它給出了什麼錯誤?你有ARR安裝,沒有它不會工作 –

+0

對不起,我錯過了關於ARR。如何檢查它是否已安裝?我對IIS相當陌生。 – Maz