【问题标题】:Deploying a war file to Tomcat on a VPS在 VPS 上将 war 文件部署到 Tomcat
【发布时间】:2016-08-23 23:07:23
【问题描述】:

在我的 VPS 上部署我的 war 文件时遇到很多问题。

我有 java-8 和 tomcat-8。我的服务器是 Apache/2.2.22 (Debian),我的 HTTP 在端口 80 上,tomcat 在 8080 上。

目前,如果您访问 www.sdfasdfasdf.com,您会看到一个空目录。但是,如果您访问 www.asdfasdf.com:8080/resumesite,您会看到我在 tomcat 上运行的页面。

我想要做的自然是让用户输入 www.asdfasdffd.com 而不是端口等。

到目前为止,我已经在nano /etc/apache2/sites-enabled/000-default.conf设置了一个虚拟主机

<VirtualHost *:80>
    ServerAdmin fdfdf@asdfasdf.com

    ServerName www.sdfasdf.com
    ServerAlias asdfasdf.com

    ProxyPass /resumesite http://localhost:8080/resumesite
    ProxyPassReverse /resumesite http://localhost:8080/resumesite
</VirtualHost>

在 tomcat 的 server.xml 文件中,我设置了一个 &lt;Host&gt;&lt;/Host&gt;

<Host name="www.asdfasdffasdf.com" appbase="webapps"
        unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

        <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs"  prefix="resumesite_log." suffix=".txt"
                 pattern="common"/>
      </Host>

通过上述设置,每个域都只列出了我的 VPS 目录。此时我不知道该怎么办。

我的问题是:

我希望用户输入 www.asdfasdfasdf.com 而不是 www.drew-jocham.com:8080/resumesite。我正在尝试这样做,但就像我上面所说的,我的 VPS 上的每个域都只列出了我的服务器整个目录以及上述设置。

很快所有站点都将成为战争文件,因此服务器上将有多个域名。有些将存储在 tomcat webapps 中,有些将直接存储在我的 HTTP 服务器的 80 端口上。

-------------------更新 1-------

我去了nano /etc/apache2/sites-enabled/000-default.conf添加了以下内容并重新启动了我的tomcat服务器。

<VirtualHost *:80>
    ServerAdmin fasdfad@asdfasdfasdf.com

    ServerName www.asdfasdfadf.com
    ServerAlias asdfasdfadf.com

    ProxyPass / http://localhost:8080/resumesite
    ProxyPassReverse / http://localhost:8080/resumesite
</VirtualHost>

当我去 www.asdfasdfasdf.com 时,除了下图之外什么都没有渲染:

它还将 www.asdfasdf/resumesite 添加到我的 VPS 上的每个域中,我有几个域,从而破坏了它们。

但是,如果我仍然去 www.asdfasdfasdf.com:8080/resumesite 它会呈现。

【问题讨论】:

  • @SureshKoya 对不起,如果我不够清楚。请阅读我对我的帖子的最后评论。
  • 只是想从下往上解开谜团,在这里。当您将浏览器指向drew-jocham.com:8080/resumesite 时会发生什么?它是否只列出目录的内容,正如您在尝试代理时看到的那样?
  • @BradBales 不,它会呈现我的页面。
  • 如果此 VPS 主机上还有其他站点,并且您在 000-default.conf 文件中具有 draw-jocham.com 的配置,则可能是 apache 中的站点配置冲突问题。您是否尝试过运行 apachectl configtest 来识别任何警告或错误。将站点配置分开是最佳实践,可能有助于解决问题。是否所有其他 VirtualHost 配置都设置了 ServerName。
  • 在 Apache 中使用基于主机的服务器名称而不是基于 IP 的 Apache 2.22 版本httpd.apache.org/docs/2.2/vhosts/name-based.html

标签: apache tomcat jakarta-ee tomcat8 java-ee-7


【解决方案1】:

我阅读了您的问题,因为您希望 www.drew-jocham.com 的根为您提供 TomCat 服务的内容http://localhost:8080/resumesite

<VirtualHost *:80>
    ServerAdmin drew@drew-jocham.com

    ServerName www.drew-jocham.com
    ServerAlias drew-jocham.com

    ProxyPass / http://localhost:8080/resumesite
    ProxyPassReverse / http://localhost:8080/resumesite
</VirtualHost>

这个关于反向代理的 Digital Ocean 指南是一个很好的阅读主题,包括更多您可能会发现有用的 Apache 配置项(如 SSL)-https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

【讨论】:

    【解决方案2】:

    你需要在你的 apache 中启用几个选项,比如我认为的 vhost_alias、proxy_ajp 和 mod_jk。此外,您的 tomcat 需要启用 ajp。 将此添加到您的 apache 配置中:

    ServerName "yourdomain.com:80"
    ServerAlias "www.yourdomain.com"
    ServerAlias "ipv4.yourdomain.com"
    UseCanonicalName Off
    
    <IfModule mod_jk.c>
        JkMount /yourapp ajp13
        JkMount /yourapp/* ajp13
        JkMount / ajp13
        JkMount /* ajp13
    </IfModule>
    

    【讨论】:

      【解决方案3】:

      第1步:- 在tomcat8 server.xml中添加如下配置

         <Host name="www.drew-jocham.com"  appBase="webapps"
              unpackWARs="true" autoDeploy="true">
      
        <Alias>www.drew-jocham.com</Alias>
          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                 prefix="$logprefix$." suffix=".txt"
                 pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      
         <Context path="" docBase="$RESUMESITEFOLDER$">
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
          </Context>
      
          </Host>
      

      在apache中创建一个站点

      <VirtualHost www.drew-jocham.com>
             ProxyPreserveHost On
             ServerName  www.drew-jocham.com
             ServerAlias www.drew-jocham.com
             Proxy Pass / http://localhost:8080/
             ProxyPassReverse / http://localhost:8080/
          </VirtualHost>
      

      上面的 conf 对我的 https://smartvocab.in 有效

      【讨论】:

        【解决方案4】:

        您需要按照以下步骤操作:

        第 1 步: 在配置 Apache 之前,您应该启用必要的模块。

        a2enmod proxy
        a2enmod proxy_http
        

        第 2 步: 接下来,您将修改/etc/apache2/sites-enabled 内的默认配置文件000-default.conf 以设置“代理”功能。

        <VirtualHost *:*>
            ProxyPreserveHost On
            ProxyPass / http://0.0.0.0:8080/
            ProxyPassReverse / http://0.0.0.0:8080/
            ServerName localhost
        </VirtualHost>
        

        第 3 步: 接下来,您要修改 server.xml 文件。

        <Host name="www.drew-jocham.com" appbase="webapps"
                unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        
                <Valve className="org.apache.catalina.valves.AccessLogValve"
                         directory="logs"  prefix="resumesite_log." suffix=".txt"
                         pattern="common"/>
                <Context path="" docBase="/resumeSite" debug="0" reloadable="true"/>
        
        </Host>
        

        完成配置后,您需要重新启动云服务器才能使更改生效。执行以下命令重启Apache:service apache2 restart

        就是这样!

        阅读更多:https://medium.com/@ldclakmal/deploy-a-java-web-application-in-digitalocean-882226dcdbd5

        【讨论】:

        • 通过修改opt/tomcat/conf/server.xmlresumesite 设置为tomcat 的root 后,此方法有效
        猜你喜欢
        • 2010-09-13
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 2015-09-03
        • 2012-05-08
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多