一个 Tomcat 可以支持多个域名,需要在 server.xml 中为每一个域名配置一个 Host,参考默认的 localhost 的配置。
安装 Tomcat 后,在 conf/server.xml 中默认有一个 localhost 的 Host:
1 | <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> |
术语:
- 应用:一个域名对应一个 Web 应用
- 项目:一个域名下可以有多个项目,参考 Tomcat webapps 下的多个项目,例如 ROOT,manager,examples
配置新域名
一、有一个新的域名 www.foo.com,则在 server.xml 中添加 Host 如下:
1 | <Host name="www.foo.com" appBase="/Users/Biao/Desktop/www.foo.com" unpackWARs="true" autoDeploy="true"> |
name 即新的域名
appBase 为新域名对应的 web 应用的根目录,如果不是绝对路径,则是相对于 Tomcat 的 Home 目录
目录名使用 www.foo.com,是为了表示对应此域名,目的明确,当然也可以用任意的名字,例如 fooox
Valve 是配置日志,directory 是相对路径时相对于 Tomcat 的 Home 目录,而不是对应的应用目录
二、在 /Users/Biao/Desktop/www.foo.com 目录下创建一个 ROOT 目录,把项目的文件放在 ROOT 目录下:
1 | ├── www.foo.com |
三、访问 http://www.foo.com:8080/test.html 则看到了新域名生效了。
提示: 测试阶段可以把 www.foo.com 添加到 host 中,例如 127.0.0.1 www.foo.com
为啥项目的文件要放在 ROOT 目录下?
www.foo.com 目录就相当于 webapps 目录,这么理解是不是就明白了?
怎么在域名 www.foo.com 下增加一个新的项目?
例如项目 pandora,放在 www.foo.com 目录下还是其他地方,访问它的 URL 是不是 http://www.foo.com/pandora?
尝试理解下下面的 Host 的意思:
1 | <Host name="www.bar.com" appBase="bar" unpackWARs="true" autoDeploy="true"> |
默认 Host
1 | <Engine name="Catalina" defaultHost="localhost"> |
defaultHost 是指使用 IP 访问时 Tomcat 默认用来处理请求的 Host,也就是访问此域名对应的应用。如果有多个域名时,最好是配置一下。
Host 别名
可以为同一个应用配置多个域名:
1 | <Host name="www.foo.com" appBase="/Users/Biao/Desktop/www.foo.com" unpackWARs="true" autoDeploy="true"> |
www.foo.com,sub.foo.com 和 foo.com 都指向同一个应用。