# tomcat配置下如何禁止ip直接访问

- Link: https://www.xuepaijie.com/html/skill/devops/695.html
- Published: 2016-10-20T11:26:32+08:00
- Author: Admin

先来聊聊为何会有这一么一回事。

在默认的部署下，可以直接通过DNS解析到部署的生产环境下，然后你的域名就能直接访问你的
应用了，然后问题来了。你发现你使用域名或是直接IP均能访问到你的应用，这会产生一些
安全问题吗？

结果是：会的。

从三个角度来浅析下，其一会引发恶意解析情况，也就是其它人也可以将他的域名解析到你的
服务器上，这样以后那也就变成了他的“应用”，会引发很多意想不到的问题；其二若业务逻辑
中对域名有相关的安全控制，而通过IP的方式会成为绕过限制的“漏网之鱼”；其三若是需要
进行安全评测的应用，相关的安全扫描工具或平台就会报诸如IP地址泄露等，这会增加解释
的成本。

好了，说了那么多，怎么在tomcat下处理好该问题是关键。这里拿IP地址是 192.168.1.2 ，
相应域名是 www.test.com举例。

打开 %TOMCAT_HOME%/conf/server.xml文件，找到 Engine节点作如下：

    ```html;
    <Engine name="Catalina" defaultHost="www.test.com">
    <Host name="www.test.com"  appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false"/>
    <Host name="192.168.1.2"  appBase="ipapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false"/>
    </Engine>
    <Engine name="Catalina" defaultHost="www.test.com">
    <Host name="www.test.com"  appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false"/>
    <Host name="192.168.1.2"  appBase="ipapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false"/>
    </Engine>
    ```

相关的点是：

1. Engine 节点配置的 defaultHost 表明缺省访问的Host。defaultHost对应的名称必须存在
于Engine节点下配置的host节点中。

当一台机器有多个IP，而按照规定只允许通过一个指定的域名访问时很有用。此时，把defaultHost
指定为非域名对应的host，这样不通过域名访问时就都定位到指定的非域名HOST了。

2. Host 节点 name 对应IP地址，以及域名。一个Host只有指定一个IP或域名。

3. Host 节点的 appBase ，对应的是存放web应用的目录。这里输入的目录相对于 %TOMCAT_HOME%，
如上面的www.test.com对应的目录是 %TOMCAT_HOME%/webapps，而192.168.1.2 对应的目录
是 %TOMCAT_HOME%/ipapps。

4.如果想通过IP访问是给用于一个提示，比如：“您好！不允许通过IP直接访问本网站，请通过
域名www.test.com访问”
 此时可以在%TOMCAT_HOME%/ipapps目录下创建一个名为 ROOT web
工程(可以从 webapps目录下拷贝)，同时将里面的 index.html文件修改成想要展示给用于的
界面。

5.修改localhost为”www.test.com”后，在%TOMCAT_HOME%/conf/Catalina/localhost下test.
xml 中配置的虚拟目录会失效。因为配置虚拟目录的元素节点Context 是server.xml下Host
节点下的子节点，Catalina下的文件夹名字是根据host节点的name属性来的。现在Host 的name
已经改www.test.com 那么需要在%TOMCAT_HOME%/conf/Catalina 新建一个”www.test.com”的
文件夹，然后把localhost下的test.xml 文件拷贝到www.test.com 文件夹下才能是虚拟目录
继续有效。
