This is a guide on setting up Tomcat to do virtual hosting and make it behave like a simple webserver with jsp and servlet support, for many different sites all hosted on the same IP address. The aim is to have a single directory for each virtual host, which can be manipulated individually without hassles from managing multiple .war files and other configuration difficulties.
To configure Tomcat for a virtual host, you need a <Host ..> directive in the server.xml file, and a ROOT.xml file in the conf/Catalina/$host directory. Here's the minimal setup required for a copy of Tomcat serving directly on Port 80, using no connectors or other configuration difficulties.
This was written for Tomcat 5 on linux, with Tomcat installed in /usr/local/tomcat
We start with the simplest configuration, of one website, called 'localhost' which keeps it's files in /usr/local/tomcat/webapps/localhost . We're not using any .war files here - all the files are placed straight into the directory.
conf/server.xml
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Service name="Catalina">
<Connector port="80"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
<Engine name="Catalina" defaultHost="localhost" debug="0">
<Host name="localhost" debug="0" appBase="webapps/localhost"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>
</Host>
</Engine>
</Service>
</Server>
conf/Catalina/localhost/ROOT.xml
<?xml version='1.0' encoding='utf-8'?>
<Context displayName="localhost" docBase="" path=""
workDir="work/Catalina/localhost/_">
</Context>
webapps/localhost
index.jsp
WEB-INF/web.xml
webapps/localhost/WEB-INF/web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
</web-app>
Adding a virtual host to this config.
From here, to add a virtual host $host with an alias of $alias, the following steps are required.
- Shut down tomcat.
- Add a Host entry to the server.xml file at the VIRTUAL HOST INJECTION POINT
<Host name="$host" debug="0" appBase="webapps/$host"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="$host\_log." suffix=".txt" timestamp="true"/>
<Alias>$alias</Alias>
</Host> - Add a configuration file for the host
mkdir conf/Catalina/$host
cat >conf/Catalina/$host/ROOT.xml
<?xml version='1.0' encoding='utf-8'?>
<Context displayName="$host" docBase="" path=""
workDir="work/Catalina/$host/_">
</Context>
^D - Add a skeleton directory structure for the files
mkdir $tomcatdir/webapps/$host
mkdir $tomcatdir/webapps/$host/WEB-INF
mkdir $tomcatdir/webapps/$host/WEB-INF/classes
mkdir $tomcatdir/webapps/$host/WEB-INF/lib - Add a minimal web.xml file
cat >webapps/$host/WEB-INF/web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
</web-app> - Add a trivial holding page
cat >index.jsp
<html>
<head>
<title>Not yet configured</title>
</head>
<body>
<p>This virtual server $host is not yet configured.</p>
</body>
</html> - Start tomcat back up again.
Automating the process
For a standard situation with tomcat installed in /usr/local/tomcat, here's a small perl script that does all this for you. Save it into the /usr/local/tomcat/bin directory. add_virtual_host.pl
Usage
./bin/add_virtual_host.pl host alias1 alias2 alias3
留言列表