- Http11Protocol 传统的Blocking IO,也是缺省配置
- Http11NioProtocol 使用JDK 1.4以后的NIO包,提供Non-Blocking的HTTP引擎
- Http11AprProtocol 使用Apache Portable Runtime库,利用本地代码提供高性能的(仍然是Blocking方式)HTTP引擎
Java Blocking Connector Java Nio Blocking Connector APR Connector
Classname Http11Protocol Http11NioProtocol Http11AprProtocol
Tomcat Version 3.x 4.x 5.x 6.x 6.x 5.5.x 6.x
Support Polling NO YES YES
Polling Size N/A Unlimited - Restricted by mem Unlimited
Read HTTP Request Blocking Non Blocking Blocking
Read HTTP Body Blocking Blocking Blocking
Write HTTP Response Blocking Blocking Blocking
SSL Support Java SSL Java SSL Open SSL
SSL Handshake Blocking Non blocking Blocking
Max Connections maxThreads See polling size See polling size
由于Tomcat 6的缺省配置还是Blocking IO,在AprListener找到tcnative库后自动改为APR connector。因此需要修改配置使用NIO connector。修改server.xml,将原来的
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改为
<Connector port="8080" minSpareThreads="5" maxSpareThreads="75"
maxThreads="1000" strategy="ms" maxHttpHeaderSize="8192" acceptorThreadCount="2"
emptySessionPath="true" protocol=" org.apache.coyote.http11.Http11NioProtocol"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
以使用NIO connector,注意红色的部分。
支持SSL的步骤(转贴自:http://www.xyhot.com/article.asp?id=280):
1. 生成server key
以命令行方式切换到目录%TOMCAT_HOME%,在command命令行输入如下命令( jdk1.4以上带的工具):
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
用户名输入域名,如localhost(开发或测试用) 或hostname.domainname(用户拥有的域名),其它全部以 enter 跳过,最后确认,此时会在%TOMCAT_HOME%下生成server.keystore 文件。
注:参数 -validity 指证书的有效期(天),缺省有效期很短,只有90天。
2. 将证书导入的JDK的证书信任库中:
这步对于Tomcat的SSL配置不是必须。
导入过程分2步,第一步是导出证书,第二步是导入到证书信任库,命令如下:
keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit
keytool -import -trustcacerts -alias tomcat -file server.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
如果有提示,输入Y就可以了。
其他有用keytool命令(列出信任证书库中所有已有证书,删除库中某个证书):
keytool -list -v -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts
keytool -delete -trustcacerts -alias tomcat -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
3. 配置TOMCAT :
修改%TOMCAT_HOME%\conf\server.xml,以文字编辑器打开,查找这一行:
xml 代码
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
将之后的那段的注释去掉,并加上 keystorePass及keystoreFile属性。
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/workbench/apache-tomcat-6.0.14/server.keystore"
keystorePass="changeit"/>
4. 访问 https://localhost:8443/ 验证配置。