详解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 应用了。

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

(0)

相关推荐

  • 详解Tomcat多域名的配置

    有时候我们有好几个项目需要发布在同一个tomcat服务器上,每个项目有不同的域名.这就需要在tomcat里配置多域名,添加多个虚拟主机. 主要在server.xml里面设置: 在<Engine></Engine>里面添加两个<Host></Host>标签,内容如下: <Host name="www.123.com" appBase="/usr/local/tomcat/webapps/123" unpackWAR

  • apache tomcat 一个网站多域名的实现方法

    windows下 C:\WINDOWS\system32\drivers\etc 文件夹内 hosts 里加上 127.0.0.1 www.domain.com 127.0.0.1 bbs.domain.com 127.0.0.1 www.domain.com 127.0.0.1 bbs.domain.com 127.0.0.1 www.domain.com 127.0.0.1 bbs.domain.com 其中 www.domain.com 与 bbs.domain.com 共享同一个网站,目

  • 详解Tomcat多域名配置(多个项目共用80端口)

    今天在做项目时,需要用已申请好的三个二级域名(公司不可能每个项目都申请一个顶级域名,所以这里解析的三个二级域名),分别配置到三个项目,网上搜了一堆,感觉看的不明不白,故在此记录下. 总体步骤是:申请域名>>配置tomcat>>域名绑定IP. 这里主要说明配置Tomcat(我的服务器是windows,lilux下同理修改): 首先保证三个项目正常部署在同一个tomcat里,默认端口号是都是80,这时候访问的url均为http://IP地址/各自项目名/XXX,如下图 然后修改tomc

  • nginx+tomcat单个域名及多个域名配置教程

    项目开发接近尾声,开始着手在生产环境部署项目,开发阶段部署项目都没用nginx.项目是采用SOA架构,多系统开发,主要包括服务系统.中台系统.后台系统.金融系统.接口系统.调度系统.报表系统等.这类分布式的系统,一般也都会用到nginx来做负载均衡. 从公司刚成立就进来,赶鸭子上架来做架构师,负责公司的所有研发事情,搭建公司的整个技术架构,起初的所有核心业务代码基本都由自己亲自把关来进行编码.系统也从最初的只有一个pc端,发展到如今pc中台.后台.android端3个app.iOS端3个app,

  • Tomcat实现多域名访问详解

    对于域名解析相信很多小伙伴都了解过,就是我们在万网购买一个域名,比如hpugs.com,然后呢?我们希望域名与我们的服务器绑定,然后通过域名直接访问我们的项目,这就是本篇要和大家一起探讨的问题.下面开始我们的工作: 1.首先是域名,登录万维网官网,填写我们想要购买的域名,然后就是查询是否已被抢注,如果没有被抢注,下面就是付钱购买了. 2.有了域名,接下来就是我们的服务器了,大家可以根据自身的需求,进行选择,比如像小笔一样,是一枚穷逼,那怎么来模拟这个过程呢?答案当然是有的,我们可以把自己的电脑当

  • 对一个tomcat实现多端口、多域名访问的方法

    1.找到tomcat的主目录,打开conf文件夹,找到并打开server.xml文件. 编辑server.xml文件,在<Service></Service>标签中添加: <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 如图: 2.进行步骤1中的配置,多端口

  • 详解实现Nginx+Tomcat实现单IP、多域名、多站点的访问

    详解实现Nginx+Tomcat实现单IP.多域名.多站点的访问 前言: 最近帮朋友做了两个网站,预算很小很小.小到两个网站只能跑在一台512M内存的公网服务器上(tomcat+MySQL,由于内存太小了,只能把两个网站部署在同一个tomcat上),每个网站有自己的域名,初步考虑使有nginx做反向代理,把两个域名映射到相应的应用上.因此就有了标题所说的"nginx多域名单服务器单IP单Tomcat不同应用"上的配置问题.Nginx介绍的废话就不多说了,在这里把配置文件贴出来给大家参考

  • 在tomcat将一个IP地址绑定多个域名的方法

    在server.xml中<Engine></Engine>下添加2个host就可以了. <Host name="www.abcd.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="

  • 详解Tomcat服务器绑定多域名和虚拟目录的方法

    tomcat采用默认安装,要想tamcat直接绑定多个域名,这里我们需要修改配置文件:C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\server.xml server.xml 的修改方式如下: (一)多域名绑定 1.如果你要绑定网站,首先是要把tomcat的默认访问端口8080,修改成80 原始: <Connector port="8080" maxHttpHeaderSize="8192&quo

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

    当我们将应用部署到 tomcat 之后,默认是通过 http://codebelief.com:8080/myapp/ 这种形式来访问的. 很显然,这只适用于调试的情况,在实际使用时,我们通常会为根据需要,为应用绑定更加便于访问的路径. 一般来说,我们不直接将 tomcat 运行在 80 端口,更安全的做法是在 80 端口运行一个 http server,然后通过反向代理转发到 8080 端口. 以下的几种方式均基于反向代理实现,需要对应的反向代理服务程序,这里使用的是 apache,也可以用

  • 详解Golang开启http服务的三种方式

    前言 都说go标准库实用,Api设计简洁.这次就用go 标准库中的net/http包实现一个简洁的http web服务器,包括三种版本. v1最简单版 直接使用http.HandleFunc(partern,function(http.ResponseWriter,*http.Request){}) HandleFunc接受两个参数,第一个为路由地址,第二个为处理方法. //v1 func main() { http.HandleFunc("/", func(w http.Respon

  • 详解Spring Boot 访问Redis的三种方式

    目录 前言 开始准备 RedisTemplate JPA Repository Cache 总结 前言 最近在极客时间上面学习丁雪丰老师的<玩转 Spring 全家桶>,其中讲到访问Redis的方式,我专门把他们抽出来,在一起对比下,体验一下三种方式开发上面的不同, 分别是这三种方式 RedisTemplate JPA Repository Cache 开始准备 开始之前我们需要有Redis安装,我们采用本机Docker运行Redis, 主要命令如下 docker pull redis doc

  • 详解JS异步加载的三种方式

    一:同步加载 我们平时使用的最多的一种方式. <script src="http://yourdomain.com/script.js"></script> <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析,只有当当前加载完成,才能进行下一步操作.所以默认同步执行才是安全的.但这样如果js中有输

  • 详解Nginx 虚拟主机配置的三种方式(基于IP)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于端口) https://www.jb51.net/article/14977.htm 详解Nginx 虚拟主机配置的三种方式(基于域名) https://www.jb51.net/article/14978.htm 1.基于IP的虚拟主机配置 如果同一台服务器有多个IP,可以使用基于IP的虚机主机配置,将不同的服务绑定在不同的IP上. 1.1

  • 详解Nginx 虚拟主机配置的三种方式(基于端口)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于IP) https://www.jb51.net/article/14974.htm 详解Nginx 虚拟主机配置的三种方式(基于域名) https://www.jb51.net/article/14978.htm 2.Nginx基于端口的虚拟主机配置 如一台服务器只有一个IP或需要通过不同的端口访问不同的虚拟主机,可以使用基于端口的虚拟主机配

  • 详解查看Python解释器路径的两种方式

    进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 运行以下脚本,或者进入交互模式手动输入即可. import sys import os print('当前 Python 解释器路径:') print(sys.executable) r""" 当前 Python 解释器路径: C:\Users\jpch89\AppData\Lo

  • 详解shell中脚本参数传递的两种方式

    方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过10个参数的情况. 1.1 示例:新建一个test.sh的文件 #!/bin/bash echo "脚本$0" echo "第一个参数$1" echo "第二个参数$2" 在shell中执行

  • 详解java连接mysql数据库的五种方式

    第一种方式:将用户名和密码封装在Properties类中 首先,导入数据库连接包这个是毋庸置疑的.创建一个jdbc驱动dirver.将数据库(以MySQL为例)的url保存在所创建的字符串url中.如果mysql版本低于8.0,则url保存形式应该为: String url = "jdbc:mysql://localhost:3306/test" 如果mysql版本为8.0版本或以上,url保存形式为: String url = "jdbc:mysql://localhost

  • 详解使用scrapy进行模拟登陆三种方式

    scrapy有三种方法模拟登陆方式: - 直接携带cookies - 找url地址,发送post请求存储cookie - 找到对应的form表单,自动解析input标签,自动解析post请求的url地址,自动带上数据,自动发送请求 1.携带cookies登陆github import scrapy import re class Login1Spider(scrapy.Spider): name = 'login1' allowed_domains = ['github.com'] start_

随机推荐