【问题标题】:Setup Tomcat for multiple websites in one server (linux)在一台服务器上为多个网站设置 Tomcat (linux)
【发布时间】:2019-06-28 06:26:17
【问题描述】:

我知道这个问题可能与其他问题相似,但是我无法解决这个问题。

我有一个有 25 个网站的服务器,它们都使用 Tomcat。我正在迁移到具有 Tomcat 8(常规版本)的新服务器,而旧服务器使用“CPanel 的简易 tomcat”。

我开始迁移一个网站,该网站现在在新服务器上运行,但是,当从浏览器调用 JSP 时,浏览器会显示 JSP 代码而不是执行它。

在我的旧服务器中,我必须从 CPanel 的 easy-tomcat 中执行一个名为 “install servlets” 的功能,我真的不知道它做了什么,但是,在执行之后,Tomcat将执行 JSP。

现在,在我的新服务器中,根据我所阅读的内容,我已将其添加到 %CATALINA_HOME%/conf/server.xml 文件中的 <Engine></Engine> 标签内(我还必须将其包含在我的旧服务器):

<Host name="mydomain.com" appBase="/home/myAccName/public_html/">
<Context path="" reloadable="false" docBase="/home/myAccName/public_html" />
</Host>

如您所见,应用程序不在 %CATALINA_HOME%/webapps/ 目录下,这就是我需要的方式。

我错过了什么?

任何帮助将不胜感激

我正在使用 Tomcat 8、EasyApache 4 和 CentOS 7.6

【问题讨论】:

  • 您可以尝试下面给出的解决方案并与我们分享您的结果。Sergio
  • @LahiruWijesekara 我刚刚做了,但没有用。就像 Tomcat 根本不读取 server.xml 文件,它的行为完全相同。我尝试使用 appBase="webapps" 以及 appBase="/home/myAccName/public_html" (这是应用程序文件所在的位置)
  • @LahiruWijesekara 我也两次重新启动了 Tomcat,并确认它正在运行,catalina.out 日志文件中没有错误
  • 我看到你的 appBase 值和 docBase 值是一样的。您能否检查您是否也有权在该目录中运行 java。检查您是否可以在该位置运行 java。您是否使用 tomcat manager 部署了应用程序?你有任何部署错误吗?@Sergio
  • 我只是将应用程序文件(JSP、html、jar 和 java 类)上传到 /home/myAccName/public_html/ 所有 jar 文件都在 WEB-INF/lib 文件夹中,一些 java 类在WEB-INF/classes 文件夹,然后我重新启动 tomcat 并部署所有内容。在这种情况下,当tomcat启动时我没有收到任何错误,但是,似乎根本没有执行部署......

标签: java tomcat


【解决方案1】:

您可以创建虚拟主机,在一台服务器上设置多个具有多个域名的网站。您也可以在 tomcat 7、8 和 9 中尝试相同的操作。 1.编辑您的相关 server.xml 文件并包括虚拟主机,如下所示。

确保重新启动您的 tomcat 服务器以使应用的更改生效。

<Host name="example.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Alias>www.example.com</Alias>

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="example_access_log" suffix=".txt"
           pattern="%h %l %u %t %r %s %b" />

    <Context path="" docBase="/opt/tomcat/webapps/myapp1"
           debug="0" reloadable="true"/>
</Host>


<Host name="mydomain.org"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Alias>www.mydomain.org</Alias>

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mydomain_access_log" suffix=".txt"
           pattern="%h %l %u %t %r %s %b" />

    <Context path="" docBase="/opt/tomcat/webapps/myapp2"
           debug="0" reloadable="true"/>
</Host>

说明

对于 example.com 域,/opt/tomcat/webapps/myapp1 是文档根目录(用于您的 web 1)。 对于 mydomain.org 域,/opt/tomcat/webapps/myapp2 是文档根目录(适用于您的 web 1)。

【讨论】:

  • 感谢您的评论,我需要虚拟主机来完成此操作吗?我不能只为所有网站配备一个 Tomcat 主机吗?此外,您指的是 tomcat 的 webapps 文件夹,我知道这是应用程序的默认文件夹,但是,我需要 webistes 来处理他们的 /home/myapp/public_html 文件夹。如果是这样,我可以把这个路径放在 docBase 参数中吗?
  • 另外,这是我已经拥有的,但它不起作用,看看我的问题的代码。唯一的区别是您包含一个“阀门”标签,我相信它仅用于记录目的。这个“阀门”标签是否可以解决问题?
  • 没有。值标签在这里不会是一个把戏。 Catalina 包括一个可选的 Valve 实现,它可以创建与 Web 服务器创建的标准格式相同的访问日志。您能解释一下您部署应用程序的方式吗?
【解决方案2】:

在您的 tomcat/conf.web.xml 文件中检查以下内容

  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />

【讨论】:

  • 不,它不存在 (CATALINA_HOME/conf/web.xml) 我应该包括这些行吗?
【解决方案3】:

这就是我设法解决这个问题的方法。我不知道这是否是最好的方法,但它确实有效。只需遵循以下 3 个步骤:

1) 在 %CATALINA_HOME%/conf/server.xml:

<Host name="mydomain.com" appBase="webapps" autoDeploy="false" unpackWARs="false"></Host>

2) 然后我不得不添加一个文件: %CATALINA_HOME%/conf/mydomain.com/ROOT.xml

<Context displayName="My Website 1" docBase="/home/accountfolder/public_html" reloadable="true">
        <Resource
                name="jdbc/rhwebDB"
                .
                .
                .
        (database connection info, optional)
    />
</Context>

然后在 Apache 端,我必须配置 mod_proxy_ajp 连接器

我已经编辑了文件:

3) /etc/apache2/conf.d/userdata/std/2/accountfolder/mydomain.com/cp_jkmount.conf

<IfModule mod_jk.c>
  JkMount /*.jsp ajp13
  JkMount /servlet/* ajp13
  JkMount /servlets/* ajp13
</IfModule>

<IfModule mod_proxy_ajp.c>
  ProxyRequests Off
  <Proxy *>
    AddDefaultCharset Off
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / ajp://mydomain.com:8009/
  ProxyPassReverse / ajp://mydomain.com:8009/

我的应用程序/网站位于 /home/accountfolder/public_html/ 并且 %CATALINA_HOME%/webapps/ 目录中没有任何内容。对我来说这更好,因为我可以使用 FTP 用户直接上传 jsp 或任何应用程序所在的位置。

如果您有任何问题,请检查 /home/accountfolder/public_html/ 目录中的文件夹权限和所有者,Tomcat 需要读取/执行权限等。如果 Tomcat 无法访问这些文件,则会显示 Tomcat 的 404 错误& 文件夹。

正如我在这篇文章中提到的,我的应用程序已“爆炸”(如果这是正确的术语),我的意思是,它没有打包在 WAR 文件中。

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 2011-07-09
    • 2012-09-04
    • 2012-12-05
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    相关资源
    最近更新 更多