對於使用tomcat-connector實現iis與tomcat實現80端口共用的問題,網上的信息異常混亂,很多地方誤人子弟,浪費時間。本文給出簡明手冊式的做法:
首先列出我們需要做的事項:
1、下載tomcat-connector的dll
2、創建2個目錄,一個用於iis建立網站,一個用於創建jakarta虛擬目錄
3、創建3個properties文件
4、iis設置映射關系
下面簡明說明:
1、下載我就不說了,在tomcat官方完整可以下,會得到isapi_redirect.dll
下載地址:https://tomcat.apache.org/download-connectors.cgi
2、創建3個properties文件,內容如下
2.1 isapi_redirect.properties
內容如下:
# Configuration file for the Tomcat ISAPI Redirector
# The path to the ISAPI Redirector Extension, relative to the website
# This must be in a virtual directory with execute privileges
extension_uri=/jakarta/isapi_redirect.dll
# Full path to the log file for the ISAPI Redirector
log_file=d:/temp/logs/isapi_redirect.log
# Log level (debug, info, warn, error or trace)
log_level=debug
# Full path to the workers.properties file
worker_file=d:/temp/workers.properties
# Full path to the uriworkermap.properties file
worker_mount_file=d:/temp/uriworkermap.properties
2.2 workers.properties
內容如下:
workers.tomcat_home=D:/tomcat9/
workers.java_home=C:/Program Files/Java/jre1.8.0_191/
# 值可任意,但需要與uriworkermap.properties配置保持一致,不一致會導致空白頁
worker.list=jdart
#下面其他可以忽略,系統都有默認值
#worker.jdart.type=ajp13
#這是tomcat的訪問域名或IP
#worker.jdart.host=127.0.0.1
#同server.xml配置一致
#worker.jdart.port=8009
2.3 uriworkermap.properties
內容如下:
#這個地方,=前面為tomcat的項目名稱,后面為worker.list的名稱,如下面就是映射 http://localhost:8080/tomcatprojectname/這個tomcat網站的
#如果不加項目名:/*=jdart 會映射所有tomcat網站
/tomcatprojectname/*=jdart
2、創建如下目錄結構
temp 目錄,用於存放workers.properties和uriworkermap.properties
temp\jakarta\目錄,用於放置isapi_redirect.properties和isapi_redirect.dll
目錄結構很重要,如果isapi_redirect.properties沒有存放到jakarta目錄,會出現GetFilterVersion失敗的500錯誤
3、iis配置
iis配置很簡單,主要有下面幾點:
1、對temp目錄創建一個網站,然后對jakarta目錄創建一個虛擬目錄,如果沒有jakarta目錄,則會映射失敗,出現404找不到資源的錯誤
圖1
2、在iis跟節點的功能列表中增加isapi和cgi限制,並設置為允許
ispai路徑,選擇你的isapi_redirect.dll,名稱隨便,記得要設置為允許
圖2
圖3
圖4 編輯權限
圖5 注意設置為允許
3、添加isapi篩選器
名稱最好為jakarta,見圖3
4、在網站的處理程序映射界面,編輯功能權限,全選各個權限即可,見圖4。
到此你如果完整按照上述配置,應該可以通過iis訪問到tomcat的地址了
整個過程有很多誤區:
誤區包括:
1、是否需要修改注冊表:
答,不需要,tomcat docs里面已經明確說明, The redirector will check for the isapi_redirect.properties file during initialisation, and use it in preference to the registry if present,所以isapi_redirect.properties最優先,其次才是注冊表,而寫注冊表非常容易搞錯。
需要注意的的是,這個properties文件一定要放在共同目錄,否則無效。
2、是否需要設置端口:
答,只有非默認才需要設置,否則不需要設置
默認就是ajp13,localhost,8009,如果有變化你才需要設置,否則work.list后面的的行,全部可以刪除。
3、是否需要在tomcat/conf目錄放置那些文件:
答:不需要,任意磁盤位置均可
4、出現GetFilterVersion 是由於沒有寫或修改注冊表
答:注冊表配置,基本不會成功,請用isapi_redirect.properties文件,更為方便
HTTP 錯誤 500.0 - Internal Server Error》調用 GetFilterVersion 失敗,在 ISAPI 篩選器 "D:\tomcat9\iistomcatconnector\jakarta\isapi_redirect.dll" 上
5、是否需要配置tomcat的server.xml
答:根本不需要
6、是否需要配置iis的jsp映射
答:不需要,dll只按照uriworkermap.properties所配置的規則進行目錄映射,比如springboot開發的程序,根本沒有擴展名,更無從配置