现在很多的公司的网站都是用tomcat作为应用服务区的,可是对于初学者,8080端口号是如何去掉的,这些网站是如何和域名绑定到一起的呢?

一个tomcat是如何绑定多域名?并且这些域名是如何对应不同的项目呢?而且我的服务器没放在机房,放在我的本地,我应该如何把我的服务器给映射到外网?这一系列的问题,今天就这个问题,我来说一下。

 

1. 域名

现在的域名不是很贵,有很多人都有,而我们注册域名的网站也会有一个DNS助解析,就是把服务器的IP绑定到这些域名上,例如访问我的博客域名: https://blog.mimvp.com

 

2. 修改端口号

现在就来说说我们的项目;比如说现在有两个项目都在我的这个tomcat下面。

那我们输入 http://localhost:8080/abc 就可以访问到我们abc这个项目了,但是端口号8080如何去掉呢?

在tomcat的conf文件夹下有一个 server.xml

打开这个文件,找到8080,只需要把8080改成80即可。

当我们再次输入 http://localhost/abc 即可。

 

3. 域名绑定项目

我们再次找到tomcat下面的conf文件夹里面的server.xml。修改

<Host name="your_domain"

debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

</Host>

 

4. 访问域名

当启动tomcat的时候,输入我们绑定的域名,是不是看到了我们的tomcat。可是我们想访问我们的项目还得再域名后面加上项目名称才能访问到,也就是说到现在我们的域名还没跟项目绑定到一起。

我们在看一下第三部,想让我们的项目和域名绑定到一起,我们只需要在</Host>前面加上<Context docBase="项目名" path=""  reloadable="true" >即可。

例如:

<Host name="www.abc.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false"

xmlNamespaceAware="false">

<Context docBase="mimvp_blog" path=""  reloadable="true" >

</Host>

5. 当我们的有两个项目都放在同一个tomcat下的时候,我们只需要把<Host></Host>加上两个既可以完成我们的2个项目的绑定,但是项目名称别忘了改哦。

6. 当我们的服务器自己维护(没有放在机房),我们需要对我们的路由做一下映射。就拿我的路由来举例,我的路由是TP-LINK WR340G型号,进入路由后,我们能找到一个转发规则,那里面有一个虚拟服务器的这项,点击新增条目以后会有:服务端口号、IP地址、协议、状态、常用服务端口号

我们只需在这里IP地址(服务器的局域网IP),协议选择ALL(有的路由好像没有这项,那就不需要填写了),状态选择生效,常用服务端口号选择HTTP或者WEB即可。这时默认的端口号为80。当常用服务端口号没有HTTP或者WEB这项时,可以选择DNS,然后手动把端口号改成80。点击生效。保存即可。如果说本人说的路由映射对您不适用或者没有看明白,可以上网找各种路由的映射方法。

7. 这个时候我们在输入我们的域名,是不是就直接访问到我们的项目了。

 

Tomcat 域名绑定与虚拟目录设置

server.xml 的修改方式如下:

一)多域名绑定

1. 如果你要绑定网站,首先是要把tomcat的默认访问端口8080,修改成80

原始:

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

修改后:

<Connector port="80" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

说明:这里就是把port:8080,修改成port:80就可以了,其他的参数不变

 

2. 接下来就是重点了,单个域名绑定:

原始:

<Engine name="Catalina" defaultHost="localhost">

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" />

</Engine>

当然这里我把注释代码统统删除掉了,省的碍眼

修改后:

<Host name="blog.ithomer.net" debug="0" appBase="/var/www/html/wordpress"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="/" docBase="/var/www/html/wordpress/"></Context>

</Host>

<Host name="forum.ithomer.net" debug="0" appBase="/var/www/html/discuz"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="/" docBase="/var/www/html/discuz"></Context>

</Host>

 

多域名绑定:

<Host name="blog.ithomer.net" debug="0" appBase="/var/www/html/wordpress"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Alias>blog.ithomer.net</Alias>

<Alias>blog2.ithomer.net</Alias>

<Alias>blog3.ithomer.net</Alias>

<Context path="/" docBase="/var/www/html/wordpress"></Context>

</Host>

这里面的参数还有很多,我也不是很清楚,不过这样做确实可以实现多域名绑定哈哈。

网站页面修改了只要直接覆盖就可以了,tomcat可以自动更新类和页面,

当然如果修改了web.xml或lib,则需要重启tomcat才可以

 

二)虚拟目录

<Host name="chengqun.202.71one.com" debug="0" appBase="d:/wwwroot/chengqun"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="/chengqun" docBase="d:/wwwroot/chengqun"></Context>

</Host>

其中,Host标记是用来配置虚拟主机的,就是可以多个域名指向一个tomcat,格式只要参考默认的就可以了。

<context>是Host标记的子元素吧,表示一个虚拟目录,它主要有两个属性,path就相当于虚拟目录名字,

而 docbase则是具体的文件位置。在这里我的虚拟路径名称为chengqun,实际上我的程序也就是html、jsp、servlet都 放在了d:/wwwroot/chengqun这个目录下了。

这样我就可以通过 chengqun.202. com/chengqun 访问我的这个虚拟目录了。

 

另外一种方法是:

<Host name="chengqun.202. com" debug="0" appBase="d:/wwwroot/chengqun"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="/" docBase="d:/wwwroot/chengqun"></Context>

</Host>

这样设置以后,输入域名可以访问这个站点程序了(Context path="/"这里不同)

没有指定默认站点,所以直接输入IP的时候,无法访问。如何让输入ip就可以访问指定的站点呢?

修改server.xml的 <Engine name="Catalina" defaultHost="chengqun.202. com">

这样就可以实现了输入ip访问chengqun.202. com这个站点的程序了!

tomcat下的配置都在conf下的server.xml下实现

里面从高到低分为:

Server

--Service

--Connector

--Engine

--Host

--Context

 

首先把通讯接口下的PORT改为80,这样就不用在浏览器中输入端口号了,如:

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

<Connector  port="80"  maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

HOST代表虚拟主机:

默认有

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

</Host>

所以我们平时都是直接输入http://localhost:端口号/项目名   就好了。。

假如我现在有个项目在E盘下的workspace目录,项目名为LZW

我不想部署在tomcat下的webapp目录下,而是直接想在TOMCAT下加载这个项目

并且用个域名(www.pw88.com)来映射。这样我们可以加上下面这段代码

<Host name="www.pw88com" appBase="e:/workspace/LZW

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="WebRoot" debug="0" reloadable="true" crossContext="true" />

</Host>

appBase为项目的绝对路径,docBase为WEB目录,假如我现在的图片都放在d:/ext.lzw.com/img下,我想用个二级域名(img.lzw.com)映射它,假如在d:/ext.lzw.com/img下放入一张图片1.jpg,我们就可以输入img.lzw.com/1.jpg来访问它了。。加上下面代码就可以实现了。。

<Host name="img.lzw.com" appBase="d:/ext.lzw.com/img"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="" debug="0" reloadable="true" crossContext="true" />

</Host>

最终我们要在本地访问域名,还得修改相爱HOST文件。。打开

C:/WINDOWS/system32/drivers/etc/hosts

加上

127.0.0.1       www.pw88.com

127.0.0.1       img.lzw.com

 

对tomcat下配置 一ip对多域名的方法详细如下,按下面配置一定能成功,经过测试了.

<Host name="localhost" debug="0" appBase="D:/Tomcat 5.0/webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Alias>localhost.com</Alias>

<Logger className="org.apache.catalina.logger.FileLogger"

directory="logs" prefix="localhost_log." suffix=".txt"

timestamp="true"/>

<Context path="" docBase="D:/Tomcat 5.0/webapps/gg" reloadable="true" caseSensitive="false" debug="0"></Context>

</Host>

 

<Host name="one.localhost" debug="0" appBase="D:/Tomcat 5.0/webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Alias>one.localhost.com</Alias>

<Logger className="org.apache.catalina.logger.FileLogger"

directory="logs" prefix="localhost_log." suffix=".txt"

timestamp="true"/>

<Context path="" docBase="D:/Tomcat 5.0/webapps/kk/a" reloadable="true" caseSensitive="false" debug="0"></Context>

</Host>

 

<Host name="two.localhost" debug="0" appBase="D:/Tomcat 5.0/webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

<Alias>two.localhost.com</Alias>

<Logger className="org.apache.catalina.logger.FileLogger"

directory="logs" prefix="localhost_log." suffix=".txt"

timestamp="true"/>

<Context path="" docBase="D:/Tomcat 5.0/webapps/kk/b" reloadable="true" caseSensitive="false" debug="0"></Context>

</Host>

 

因无域名解析服务器,所以在hosts上配,来模拟dns解析.

10.1.1.241 localhost 指向gg文件夹

10.1.1.241 localhost.com 指向gg文件夹

10.1.1.241 one.localhost 指向a文件夹

10.1.1.241 one.localhost.com 指向a文件夹

10.1.1.241 two.localhost 指向b文件夹

10.1.1.241 two.localhost.com 指向b文件夹

经过多方面尝试,终于在tomcat下配置成功了.

 

 

参考推荐:

Apache、Nginx、Tomcat 区别

Tomcat、Netty、Jetty 简单压测报告

Jetty 工作原理以及与 Tomcat 的比较

Tomcat 系统架构与设计模式:工作原理

Tomcat 系统架构与设计模式:设计模式分析

Tomcat 多域名配置

Ubuntu配置Tomcat

Tomcat vs Apache

Nginx 架构模型深入分析

Nginx 设计原理与技术架构

Nginx location 正则匹配规则

Spring 常见技术问题总结

Spring 编程技术的经典面试题

Docker 底层技术详解

运维人员常用软件总结

高可用网站架构的技术实践

高可用系统设计的一些技术方案

高性能、高可用、高并发的网站架构技术

高性能、高可用、高并发的技术架构的常见问题

开源的力量:Twitter

Storm 配置参数详解

Twitter:一条推文背后的开源力量

Java中常见的CMS GC问题分析与解决

腾讯大数据之TDW计算引擎解析——Shuffle