首先是SSL配置问题,Tomcat默认是用APR的东东来作SSL,结果网络上找了openssl等组件来生成keystore文件也没完成APR SSL的配置,好像用了不一样的算法来生成证书文件,配置参数也有不一样。折腾了老久,最后只好弃之不用。
<!--APR library loader. Documentation at /docs/apr.html
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-->
还好原来的SSL方式还支持:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${catalina.home}/conf/aaa.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS"
/>
用jdk生成证书库文件便可:
$JAVA_HOME/bin/keytool -genkeypair -alias proja -keyalg RSA -keystore /tmp/aaa.keystore
记住证书密码和库密码设成一致方便使用。
Tomcat默认8443做为SSL端口,若是要改成SSL默认端口443,须要tomcat以root身份启动,或者修改Tomcat启动方式(Under UNIX all ports <1024 are "privileged" ports. Only root may open a priviledged port.)。由于1024如下的端口为了安全缘由默认只能为root打开。
而全部的非SSL的connector的redirectport记住要改为你的真实ssl端口号。
Tomcat以nobody或其余非root用户启动,想用80/443端口的话,tomcat官网说能够用jsvc命令而不是catalina.sh来启动:
$TOMCAT_HOME/bin/jsvc \
-user $TOMCAT_USER \
-cp ./bin/bootstrap.jar \
-outfile ./logs/catalina.out \
-errfile ./logs/catalina.err \
-pidfile "$CATALINA_PID" \
\
-Djava.endorsed.dirs=./common/endorsed \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap start
还有就是用iptables/ipchains网关/代理软件来实现端口重定向来把外部标准端口请求转到server的8080/8443或其余非标准端口,如iptables能够以下配置:
iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -d your hostname -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -d your hostname -p tcp --dport 80 -j REDIRECT --to-ports 8080
或者用第三方链接器如CoyoteConenctor,听说也能够配置代理端口在链接器配置项里(未验证):
<Connector
className="org.apache.catalina.connector.http.HttpConnector"
port="8080"
proxyPort="80"
>
Tomcat虚拟主机配置能够在<server><service><Engine>标签下配置:
Engine有defaulthost属性能够配置默认主机名,基本都localhost
其中的子元素<Host>为配置虚拟主机项,有name, appBase, unpackWARs, autoDeploy属性能够配置,如<host name=”localhost” appBase=”webapps” unpackWARS=”true” autoDeploy=”true”>,Host有子元素Valve能够配置各类特性,比较经常使用的access log配置:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
Host还能够用Context子元素配置虚拟目录别名:
<Context path="/" docBase="projb.war" debug="0"/>
Engine有Valve子元素能够配置各类特性,比较有用的指定客户ip范围:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1|171.69.11[2-9].*|171.69.12[0-2].*| 1.*.*.*" deny="" />, allow/deny是一种wildcard模式定义。
另外,Server有GlobalNamingResources子元素,其中能够配置Resource来实现全局JNDI配置,如data source, JMS, LDAP等。Tomcat的全局JNDI配置也能够在$TOMCAT_HOME/conf/context.xml里配置。而app级的JNDI配置应该在$doc_base/project.war/META-INF/context.xml里配置,指定客户ip范围的Valve元素org.apache.catalina.valves.RemoteAddrValve也配置于此代表做用域为某个应用而不是全部tomcat应用。