【问题标题】:Using Tomcat to serve all web content使用 Tomcat 提供所有 Web 内容
【发布时间】:2015-03-30 03:27:06
【问题描述】:

我有一个带有 Java 8 和 Tomcat 8 的 VirtualBox Ubuntu 服务器。我想使用 Tomcat 为我的所有 Java 应用程序使用它的 webapps 目录来提供所有 Web 内容,并为我的所有静态应用程序创建一个相同级别和权限的 webdocs 目录html 网站。

如有必要,我还具有检查每个提供登录服务的 URL 的安全性,因此提供我的静态 html 不能基于 URL 路径。我想复制 Apache2 匹配域名并提供相关 docBase 的能力。以下是我的 server.xml 尝试在 Engine 标记中为我的静态 html 添加上下文路径:

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">

  <!-- SingleSignOn valve, share authentication between web applications
       Documentation at: /docs/config/valve.html -->
  <!--


  <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
  -->

  <!-- Access log processes all example.
       Documentation at: /docs/config/valve.html
       Note: The pattern used is equivalent to using pattern="common" -->
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="localhost_access_log" suffix=".txt"
        pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

<Host name="mywebsite.com" appBase="webdocs">
   <Alias>www.mywebsite.com</Alias>
   <Context path="" docBase="/mywebsite/" />
</Host>

我尝试了上述方法的变体,但得到 404 代码或访问被拒绝。我确定与我的 web.xml 存在冲突,其中安全性旨在拦截每个 URL。正如我所说,我需要保持相同的安全性,但希望域名解析到类似于 Apache2 所做的 docBase。

最后,如何使用域名而不是 192.168.x.x:8080/ 来模仿我的生产服务器?有没有办法在我运行 VirtualBox 的笔记本电脑上做到这一点?

任何帮助将不胜感激。

谢谢,

布兰登

附:我知道我必须设置我的 IPTable 规则以将 8080 重新路由到 80 并将 8443 重新路由到 443,然后在 Tomcat 中配置多个 SSL 证书。我正在逐步进行这些配置。

更新: 我能够使用 sever.xml 中的新 Host 和 Context 元素让 Tomcat 在 webapps 之外托管我的静态 html:

  <Host name="mywebsite.com"
     appBase="/home/webdocs"
     unpackWARs="true"
     autoDeploy="true">
        <Alias>www.testmywebsite.com</Alias>
        <Context path=""
           docBase="mywebsite"
           reloadable="false" />
        <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="testmywebsite_access_log"
           suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  </Host>

appBase 定义了我的静态 html 的位置,而 docBase 定义了包含网站特定 html 相对于 appBase 的文件夹。 name 和 alias 属性定义了 Tomcat 将匹配和服务的域名请求不依赖于 URL 的路径。

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    简单的方法是将webdocs 定义为一个webapp,有它自己的web.xml 和Context.xml。它不需要包含任何代码。

    【讨论】:

      【解决方案2】:

      Apache2 匹配域名并提供相关服务的能力 文档库

      这称为“虚拟主机”。

      我想最可靠的解决方案是使用Tucky URL rewriter filter 来检测主机并将请求定向到特定处理程序或静态内容的特定路径(例如从 /* 到 /webdocs/*)。

      如何使用域名而不是 192.168.x.x:8080/ 来模仿我的 生产服务器

      使用主机文件(UNIX 中的 /etc/hosts,Windows 中的 %WINDIR%\system32\drivers\etc\hosts)

      【讨论】:

        猜你喜欢
        • 2018-12-25
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 2017-09-17
        • 2015-06-20
        • 2011-02-01
        • 1970-01-01
        相关资源
        最近更新 更多