当前位置: 首页 > 编程笔记 >

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

贾建茗
2023-03-14
本文向大家介绍详解Tomcat Web 应用绑定域名的几种方式,包括了详解Tomcat Web 应用绑定域名的几种方式的使用技巧和注意事项,需要的朋友参考一下

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

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

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

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

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

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ service apache2 restart

通过 80 端口访问

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

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

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

<VirtualHost *:80>
ServerName codebelief.com

ProxyRequests On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

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

可以使用以下命令:

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

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

$ a2ensite tomcat

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

$ service apache2 reload

完成。

通过子域名访问

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

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

只需将 tomcat.conf 文件改成:

<VirtualHost *:80>
ServerName codebelief.com
ServerAlias app.codebelief.com

ProxyRequests On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

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

域名根路径访问应用

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

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

<VirtualHost *:80>
ServerName codebelief.com
ServerAlias app.codebelief.com

ProxyRequests On
ProxyPass / http://localhost:8080/myapp/
ProxyPassReverse / http://localhost:8080/myapp/
</VirtualHost>

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

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

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

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

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

修改 tomcat/conf/server.xml 文件

在 <Engine> 标签内添加下面的主机配置:

<Host name="codebelief.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Alias>app.codebelief.com</Alias>
  <Context path="" docBase="myapp" debug="0" privileged="true" />
  <Valve className="org.apache.catalina.valves.AccessLogValve"
  directory="logs"  prefix="localhost_access_log." suffix=".txt"
  pattern="%h %l %u %t "%r" %s %b" resolveHosts="false" />
</Host>

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 -t mangle -A PREROUTING -p tcp --dport 8080 -j DROP

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍详解Javascript几种跨域方式总结,包括了详解Javascript几种跨域方式总结的使用技巧和注意事项,需要的朋友参考一下 在客户端编程语言中如javascript,同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。只有当两个域具有相同的协议,相同的主机,相同的端口时,我们就认定他们是相同的域。可是在实际开发中我们经常需要获取其他域的

  • 本文向大家介绍Apache 2配置域名绑定的方法详解,包括了Apache 2配置域名绑定的方法详解的使用技巧和注意事项,需要的朋友参考一下 前言 最近新装了个OJ系统,想着总是用ip访问挺难记得,就打算绑一个域名上去。在配置的过程中也遇到了一些问题,现在总结下面来分享给大家,方便有需要的朋友们参考学习。 方法如下 网上百度了很多教程,发现大家都是在配置httpd.conf文件,但我自己在Linux

  • 本文向大家介绍Mybatis的几种传参方式详解,包括了Mybatis的几种传参方式详解的使用技巧和注意事项,需要的朋友参考一下 前言 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗? 没想到其他问题回答的很好,唯独这个问题一知半解,勉强回答了其中两种方式。 于是这篇文章就来说一说Mybatis传参的几种常见方式,给正在面试或者准备面试的朋友巩固一下。 单个

  • 本文向大家介绍用 Python 连接 MySQL 的几种方式详解,包括了用 Python 连接 MySQL 的几种方式详解的使用技巧和注意事项,需要的朋友参考一下 尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要

  • 本文向大家介绍详解三种方式在React中解决绑定this的作用域问题并传参,包括了详解三种方式在React中解决绑定this的作用域问题并传参的使用技巧和注意事项,需要的朋友参考一下 在React中时常会遇到this指向的作用域问题 从而导致undefined报错 先来个Demo: 功能很简单 点击按钮改变文字 但会遇到问题:Cannot read property ‘setState' of u

  • 本文向大家介绍jQuery绑定事件的几种实现方式,包括了jQuery绑定事件的几种实现方式的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jQuery绑定事件多种实现方法,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家继续关注小编为大家分享的精彩文章。