Tomcat Web 应用绑定域名的几种方式

阅读:418 2019-03-19 14:34:21 来源:codebelief

当我们将应用部署到tomcat之后,默认是通过http://codebelief.com:8080/myapp/这种形式来访问的。

很显然,这只适用于调试的情况,在实际使用时,我们通常会为根据需要,为应用绑定更加便于访问的路径。

一般来说,我们不直接将tomcat运行在80端口,更安全的做法是在80端口运行一个httpserver,然后通过反向代理转发到8080端口。

以下的几种方式均基于反向代理实现,需要对应的反向代理服务程序,这里使用的是apache,也可以用nginx实现,大同小异。

首先,需要确保开启mod_proxy模块:

$sudoa2enmodproxy

$sudoa2enmodproxy_http

$serviceapache2restart

通过80端口访问

即通过http://codebelief.com/myapp/的形式访问web应用。

我们在80端口运行apache,由apache处理80端口的请求,然后将所有请求转发给运行在8080端口的tomcat处理,这样就无需修改tomcat的运行端口,另一方面也确保了安全性。

在/etc/apache2/sites-available/目录下添加配置文件tomcat.conf:

servernamecodebelief.com

proxyrequestson

proxypass/http://localhost:8080/

proxypassreverse/http://localhost:8080/

然后将该配置文件通过软链接放入/etc/apache2/sites-enabled/目录以启用该配置。

可以使用以下命令:

$ln-stomcat.conf/etc/apache2/sites-enabled/tomcat.conf

也可以使用apache自带的命令:

$a2ensitetomcat.conf

最后重新加载apache配置文件:

$serviceapache2reload

完成。

通过子域名访问

即通过http://app.codebelief.com/myapp/访问web应用。

与上述配置过程类似,依然采用反向代理的方式将子域名请求转发给8080端口。

只需将tomcat.conf文件改成:

servernamecodebelief.com

serveraliasapp.codebelief.com

proxyrequestson

proxypass/http://localhost:8080/

proxypassreverse/http://localhost:8080/

同样,将该文件链接到sites-enabled目录下,然后reload配置即可。

域名根路径访问应用

即直接通过http://codebelief.com的形式访问myapp,而无需加应用所在目录名。

tomcat.conf文件内容如下,其它步骤一样。

servernamecodebelief.com

serveraliasapp.codebelief.com

proxyrequestson

proxypass/http://localhost:8080/myapp/

proxypassreverse/http://localhost:8080/myapp/

这样,就可以通过http://codebelief.com或者http://app.codebelief.com直接访问myapp了。

使用根路径直接访问应用,还有另一种实现方式。

这种方式不需要apache或nginx等反向代理服务程序,但是如果要使用这种方式,最好是tomcat只运行单个web应用,避免一个web应用的内部路径与其它web应用的路径冲突。

我们这里不考虑端口号的修改,使用默认的8080端口。

目标是通过http://codebelief.com:8080来访问myapp。

修改tomcat/conf/server.xml文件

标签内添加下面的主机配置:

app.codebelief.com

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

pattern="%h%l%u%t"%r"%s%b"resolvehosts="false"/>

host标签中的name表明该配置用于处理来自codebelief.com主机的请求。注意,name必须为一级域名或ip地址。

要使得子域名app.codebelief.com也能使用该配置,即根路径直接访问myapp,那么需要使用alias标签绑定该子域名。

context标签内的path=""表示直接通过根路径访问,docbase="myapp"表示根路径默认访问的是myapp应用。

对外屏蔽8080端口

当我们使用不包含端口号的形式访问myapp时,我们还可以对外屏蔽8080端口,即必须通过80端口由apache转发给tomcat。

要使外部不能直接访问8080端口,可以在iptables中添加对应规则,有关iptables的具体原理和用法,可以自行参考相关文章。

在这里,只需要执行以下命令:

$iptables-tmangle-aprerouting-ptcp--dport8080-jdrop

该命令会在mangle表中的prerouting链添加指定规则,即对来自8080端口的tcp连接,直接做丢弃处理。

这样就可以禁止外部通过8080端口访问tomcat应用了。

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服