首先是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应用。
本文转自 dannyy1026 51CTO博客,原文链接:
http://blog.51cto.com/dannyyuan/756002