详解Tomcat Web 应用绑定域名的几种方式
当我们将应用部署到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
最后重新加载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
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应用了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。