如今網上流傳的實現iis和tomcat共享80端口的方法是基於isapi_redirect插件實現的, 個人實現方法不一樣, 原理類似,具備更好的優勢.java
先說下基於isapi_redirect缺點,java 項目做爲iis下的一個虛擬目錄存在, iis下的項目使用頂級域名, tomcat下的項目只能做爲二級目錄訪問;正則表達式
例如iis下項目 使用www.iisproject.com訪問, 則tomcat下的項目只能 www.iisproject.com/tomcatproject 這麼訪問, 如此變得不友好了.api
個人實現方式, 利用IIS的應用程序請求路由 ARR (application request route) 來實現請求轉發.tomcat
"共用80端口"示意服務器
大體步驟( ARR使用請參考上篇文章或自行百度), 在iis上安裝ARR, 配置2個server farm (iis應用使用一個iisFarm,tomcat使用一個tomcatFarm), 每一個server farm中只有一臺機器即localhost,端口使用本身應用端口(如上圖iis 應用使用8080,tomcat應用使用8090) , 每個server farm 都設置url重寫routing rules規則, 規則中根據訪問url的不一樣轉發給不一樣的serverFarm處理. app
場景一 使用不一樣的域名訪問url
iis下的某個應用域名爲www.iisproject.com, tomcat下的某個應用域名www.tomcatproject.com. spa
iisfarm使用的routing rules.插件
根據上圖設置, 只有www.iisproject.com域名下的80端口的http請求 iis 會交給ARR中的iisFarm進行處理, iisFarm中只有localhost:8080的機器,即請求轉交給了8080端口的iis應用負責處理. server
tomcatFarm routing rules設置
同理www.tomcatproject.com域名下的80端口的http請求 iis 會交給ARR中的tomcatFarm進行處理, tomcatFarm中只有localhost:8090的服務器, tomcat工做在8090端口, 因此請求是tomcat在處理.
場景二 使用二級目錄訪問
場景一使用了2個不一樣的域名, 若是隻有一個域名或沒有域名, 咱們也是有辦法的, 就是使用 域名/二級目錄 或IP/二級目錄的方式實現訪問, 如 www.project.com/iis,www.project.com/tomcat 或192.168.0.10/iisproject ,192.168.0.10/tomcatproject方式. 實現方式和場景一幾乎同樣, 只是配置routing rules時, url 爲www.project.com/iis開頭的交給iisFarm處理, 爲www.project.com/tomcat開頭的交給tomcatFarm處理, 能夠經過正則表達式,通配符搞定的.
以上兩個場景, 不管使用域名訪問,仍是使用二級目錄訪問, 在外部客戶端看來, iis應用和tomcat應用共用了80端口,目的達到.